MySQL的介紹以及使用


什么是 MySQL?


MySQL 是一種數據庫。數據庫定義了存儲信息的結構。以表的方式存儲信息,設置有索引可以快速定位到需要的內容,避免查找數據時要遍歷整個庫,耗費資源速度也太慢。

  • 索引:將表中的某一個或某些字段抽取出來,單獨將其組織一個獨特的數據結構中,類似一本書的目錄;

為什么MySQL是最流行的數據庫?

簡單:MySQL的使用簡單,任何稍微有IT背景的技術人員都可以無師自通地參照文檔安裝運行和使用MySQL,這幾乎沒有什么門檻。

開源:開源意味着安全和免費,代碼就擺在那里,無數的技術愛好者一起來審核程序,一起修補問題,這讓使用者非常的放心。同時,開源帶來了免費。

復制:MySQL從3.23.15這個版本開始,支持了replication,可以幫助MySQL使用者搭建Master-Slave的架構。把數據准實時的從一個實例同步到另一個實例。

引擎:MySQL不同於其他多數數據庫之處是它對插件式存儲引擎的支持,這是一個開放的設計,有點兼容並包,海納百川的感覺。

MySQL對數據的管理


MySQL的事務

請求<-->響應 的處理過程

多個操作被當做一個整體對待,要想看一個關系型管理數據庫系統是否支持事務就要看關系型數據庫系統是否滿足ACID測試

  • ACID 事務的一個基本標准
    • A:原子性
    • C:一致性
    • I:隔離性
    • D:持久性

舉個例子:比如去銀行存錢1000元,存錢是一個過程,服務器這個時候應該響應修改你的銀行卡信息加1000元。這個時候就構成了一個事物

但是如果剛存過錢服務器還沒來的及響應,這個時候突然停電了(比如沒有應急供電措施),這個時候錢是存過還是沒存?這個時候需要利用事物的“回滾”功能,因為沒有構成一個事物,恢復到還沒有存錢之前的狀態。

要么全部都成功執行,要么全部都失敗“回滾”

MySQL(RDMBS)設計范式基礎概念

MySQL屬於關系型數據庫,關系型數據庫以行和列的形式存儲數據,以便於用戶理解。這一系列的行和列被稱為表,一組表組成了數據庫。用戶用查詢(Query)來檢索數據庫中的數據。一個Query是一個用於指定數據庫中行和列的SELECT語句。

設計關系數據庫時,遵從不同的規范要求,設計出合理的關系型數據庫,這些不同的規范要求被稱為不同的范式,各種范式呈遞次規范,越高的范式數據庫冗余越小。目前關系型數據庫有六種范式,常用的只有三種。

第一范式:所有的域都應該是原子性的,即數據庫表的每一列都是不可分割的原子數據項;

第二范式:在第一范式基礎上建立起來的,滿足第一范式之后增加了主鍵,要求數據表里的所有數據都要和該數據表的主鍵有完全依賴關系;

第三范式:同樣基於第二范式基礎上建立起來的,要求一個關系中不能包含,已在其它關系已包含的非主關鍵字信息;

主鍵:一個或多個字段的組合,填入主鍵中的數據,必須不同於已存在的數據;不能為空; 外鍵:一個表中某字段中能插入的數據,取決於另外一張表的主鍵中的數據; 惟一鍵:一個或多個字段的組合,填入惟一鍵中的數據,必須不同於已存在的數據;可以為空;一個表可以存在多個唯一鍵; 檢查性約束:取決於表達式的要求;自定義表達式約束,比如一個人正常年齡在一百五十歲一下(這里排除以后科技發展迅速,人的年齡可以更高);

MySQL與MariaDB

MariaDB屬於插件式存儲引擎(存儲引擎也稱為“表類型”;):存儲管理器有多種實現版本,彼此間的功能和特性可能略有區別;用戶可根據需要靈活選擇;

值得說的是在CentOS7中MariaDB已經完全把MySQL替代了,並且完全兼容MySQL。

常用存儲引擎介紹;

  • MyISAM :不支持事務;表級鎖,崩潰后不保證安全恢復
  • MyISAM :Aria:增強版,崩潰后可以修復
  • InnoDB :XtraDB 支持 行級鎖,外鍵,熱備
MariaDB [(none)]> SHOW ENGINES; ##顯示MariaDB支持的存儲引擎 +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ | InnoDB | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | CSV | YES | CSV storage engine | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | FEDERATED | YES | FederatedX pluggable storage engine | YES | NO | YES | | Aria | YES | Crash-safe tables with MyISAM heritage | NO | NO | NO | +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ 10 rows in set (0.00 sec)

MySQL的使用


  • 命令行交互式客戶端程序

查看指定用戶所獲得的授權:

SHOW GRANTS FOR 'user'@'host'

SHOW GRANTS FOR CURRENT_USER;

回收權限:

REVOKE priv_type, ... ON db_name.tbl_name FROM 'user'@'host';

注意:MariaDB服務進程啟動時,會讀取mysql庫的所有授權表至內存中;

(1) GRANT或REVOKE命令等執行的權限操作會保存於表中,MariaDB此時一般會自動重讀授權表,權限修改會立即生效;

(2) 其它方式實現的權限修改,要想生效,必須手動運行FLUSH PRIVILEGES命令方可;

常用選項

-u:后面跟用戶名 -u和用戶名中間一定不要有空格;

-h:后面跟遠程主機地址,默認為localhost,-h和HOST中間一定不要有空格;

-p[PASSWORD]:USERNAME所表示的用戶的密碼,-p直接回車靜默交互式輸入密碼;

注意:mysql的用戶賬號由兩部分組成:'USERNAME'@'HOST'; 其中HOST用於限制此用戶可通過哪些遠程主機連接當前的mysql服務,HOST支持通配符,這里%代表任意長度的任意字符;

 
         
root用戶創建用戶名和密碼

mysqladmin -u root -p password 111111   ##-u 指明用戶 -p password 指明密碼

創建用戶
 CREATE USER 'name'@'localhost' IDENTIFIED BY '111111';  ##創建用戶指定用戶名字,登錄方式以及密碼。 查看所有的用戶賬號及密碼 SELECT user,host,password FROM user; [root@www ~]# mysql -uroot -hlocalhost -p  ##登錄root賬戶 Enter password: ##靜默輸入密碼 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 117 Server version: 5.5.44-MariaDB MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> use mysql ##切換到MySQL庫  Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [mysql]> SELECT user,host,password FROM user; ##顯示所有的用戶,登錄主機,以及密碼,密碼加密存放 +--------+-----------------+-------------------------------------------+ | user | host | password | +--------+-----------------+-------------------------------------------+ | root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | ::1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | MySQL | 192.168.217.140 | *FD571203974BA9AFE270FE62151AE967ECA5E0AA | | ming | % | *FD571203974BA9AFE270FE62151AE967ECA5E0AA | | MySQLL | 192.168.217.138 | *FD571203974BA9AFE270FE62151AE967ECA5E0AA | | tom | 192.168.217.139 | *FD571203974BA9AFE270FE62151AE967ECA5E0AA | +--------+-----------------+-------------------------------------------+ 7 rows in set (0.00 sec)

SQL語句對數據庫管理常用的兩種方式:

  • DDL:數據定義語言-主要是用在定義或改變表(TABLE)的結構,數據類型,表之間的鏈接和約束等初始化工作上,他們大多在建立表時使用,創建表的時候有問題看這里
    • CREATE: 創建
    • ALTER:改變
    • DROP: 刪除
    • SHOW: 顯示
  • DML:數據操縱語言-這4條命令是用來對數據庫里的數據進行操作的語言,修改表的時候有問題看這里
    • INSERT: 添加
    • DELETE: 刪除
    • SELECT: 選擇
    • UPDATE: 修改

切換數據庫;

連接到MySQL服務器后,則需要選擇特定的數據庫的來工作。這是因為在MySQL數據庫上可能有多個庫存在。注意每個庫的權限不一樣。

use命令格式:use <數據庫名>;

MariaDB [(none)]> use hidb ##切換名字為hidb的庫 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [hidb]> ##[hidb]>這里名字已經改成hidb說明切換成功

獲取命令幫助;

mysql> help KEYWORD(命令本身);

創建: 表創建一定要指定屬於哪個庫!!;
HELP查看幫助 MariaDB [data]> HELP CREATE DATABASE ##HELP 命令 查看幫助 Name: 'CREATE DATABASE' ##查詢的是哪個命令 Description: ##命令描述,這里為空 Syntax: ##描述 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ... ##語法 create_specification: ##創建規范 [DEFAULT] CHARACTER SET [=] charset_name ##設置字符集 | [DEFAULT] COLLATE [=] collation_name ##設置排序規則 ENGINE [=] engine_naem ##設置支持哪些存儲引擎  SHOW ENGINES; ##顯示總共有哪些存儲引擎 MariaDB [data]> CREATE DATABASE XiaoHua; ##創建一個為XiaoHua的庫 Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> select version();  ##查看當前MySQL版本號
+----------------+
| version() |
+----------------+
| 5.5.52-MariaDB |
+----------------+
1 row in set (0.00 sec)

MariaDB [(none)]> select 1+1;  ##做算術運算
+-----+
| 1+1 |
+-----+
| 2 |
+-----+
1 row in set (0.00 sec)

 

客戶端命令:本地執行

  • \u db_name:設定哪個庫為默認數據庫
  • \q:退出;
  • \d CHAR:設定新的語句結束符,默認為“;”;
  • \g:語句結束標記,如果加\g “;”可以省略;
  • \G:語句結束標記,結果豎排方式顯式;
  • \s:顯示服務器狀態
  • \!:執行shell命令
  • \.:裝載並運行sql腳本

數據類型:

字符型:

  • 定長字符型:CHAR, BINARY
  • 變長字符型:VARCHAR, VARBINARY
  • TEXT, BLOB
  • SET, ENUM

數值型:

  • 精確數值型:INT
  • 近似數值型:FLOAT, DOUBLE

日期時間型:

  • DATE,TIME,DATETIME,TIMESTAMP

WHERE語句;

用來指明篩選條件

SELECT col1, ... FROM tbl_name WHERE clause;

查看 col1 來自 tbl_name 這個表 只看 clause 內容

 

WHERE clause:用於指明挑選條件,例如:age > 30;

col_name 操作符 value:

這里通配符有兩個需要注意:

  • %:任意長度的任意字符;
  • _:任意單個字符;

RLIKE 'PATTERN'正則表達式對字符串做模式匹配;

操作符(1) :

  • >, <, >=, <=, ==, !=
  • 組合條件:and | or | not

操作符(2) :

  • BETWEEN ... AND ...
  • LIKE 'PATTERN' 例如WHERE name LIKE 'Z%' 找到name這一行中Z開頭的行
MariaDB [hidb]> SELECT * FROM studentss WHERE sid BETWEEN 3 AND 5; ##只顯示3~5行 +-----+-----------+--------+ | sid | name | gender | +-----+-----------+--------+ | 3 | Sun Li | F | | 4 | Deng Chao | M | | 5 | Jiang Xin | F |
+-----+-----------+--------+ 3 rows in set (0.00 sec)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM