MySQL常用語句

      Hi,大家好,今天我給大家帶來的是“MariaDB(MySQL)常用語句的使用


      說明

              1MySQL語句不區分字符大小寫,在Unix或類Unix(Linux)系統下“參數”區分字符大小寫

              2、多數MySQL語句以";"結尾;如果結尾處不寫";"MySQL會等待輸入下一條語句,直到結尾有";"爲止

              3、一行需要執行多條語句用";"進行分隔

           本篇內容以Linux系統爲例;本文中的[ 符號裏邊的內容爲可選內容,既可有可無的 ]{ 符號裏的內容爲必須給出的內容 }| 符號爲或者之意;文本中有下劃線的爲必須替換的參數;語句之前的符號# Linux系統的命令提示符(需在系統下執行的)、符號> MySQL數據庫提示符(需在MySQL數據庫中執行的);字體顏色爲紅色的是需要注意的地方(可能會出現誤操作的地方)

 

溫馨提示:使用電腦閱讀效果更佳

 

MariaDB(MySQL)語句分類

      服務端命令:通過mysql連接發往服務器執行並取回結果(SQL語句)

              DDL(Data Defined Language)要用於管理數據庫組件,例如表、索引、視圖、用戶、存儲過程

                     CREATE DATABASE, ALTER DATABASE, DROP DATABASE, CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, DROP INDEX, CREATE USER, DROP USER, SELECT

            DML(Data Manipulation Language)數據操縱語言,主要用管理表中的數據,實現數據的增、刪、改、查

                     INSERT, DELETE, UPDATE, SELECT

              DCL:權限管理

                     GRANT, REVOKE

      客戶端命令:本地執行

以下語句有兩種表示方式(clear,\c),語句結尾處不用加; 但加了也不會出錯

語句

說明

? (\?)

獲取命令幫助

clear (\c)

清除當前的輸入語句

connect (\r)

重新連接MySQL

delimiter (\d)

設置語句分隔符,默認爲分號;

ego (\G)

語句結束標記,結果以垂直方式顯示

exit (\q)

退出MySQL

go (\g)

語句結束標記

help (\h)

顯示此幫助

prompt (\R)

更改MySQL提示符

quit (\q)

退出MySQL

source (\.)

裝載並運行SQL腳本,腳本存放的位置"MySQL"用戶需要有權限讀取

status (\s)

獲取MySQL狀態信息

system (\!)

執行shell命令

use (\u)

設定哪個庫爲默認數據庫

 

     一、登錄/退出MySQL

           登錄

                 登錄本地數據庫

                        匿名登錄

                                   # mysql [數據庫名稱]

                                   # mysql -p [數據庫名稱]

                           指定用戶登錄

                                   # mysql -u 用戶名 -p [數據庫名稱]

                                   # mysql -u 用戶名 –p用戶的密碼 [數據庫名稱]

                  遠程登錄數據庫

                            # mysql -h HOST -u 用戶名 -p用戶的密碼 [數據庫名稱]

                 注意:在登錄時可指定數據庫"[DATABASE_NAME]"

           退出

                     > exit

                     > quit

                     > \q

                     Ctrl+C

1.JPG

     二、選擇/切換數據庫:在數據庫中執行的操作都要先選擇數據庫

              > USE 數據庫名稱;

2.JPG

 

     三、數據庫管理

           創建

                 創建一個新的數據庫

                            > CREATE {DATABASE | SCHEMA} 數據庫名稱;

                 創建一個新的數據庫,如果數據庫不存在,則創建

                            > CREATE DATABASE IF NOT EXISTS 數據庫名稱;

                      注意:數據庫名稱在創建時定義,後期不可更改

3.JPG

           修改

                 修改指定數據庫的默認字符集

                            > ALTER DATABASE 數據庫名稱 CHARACTER SET '字符集名稱';

           查詢

                  查看當前設備上已有的數據庫

                            > SHOW DATABASES;

                     查看以指定字符開頭的數據庫

                            > SHOW DATABASES LIKE 'name%';

                     查看以指定字符結尾的數據庫

                            > SHOW DATABASES LIKE '%name';


4.JPG

                     查看數據庫所支持的引擎

                            > SHOW ENGINES;

                    查看所支持的字符集

                            > SHOW CHARACTER SET;

                      常見字符集

                                   big5:繁體中文

                                   gb2312:簡體中文

                                   utf8:統一的字符編碼標準

                    查看字符集的排序方式

                            > SHOW COLLATION;

                     看當前數據庫的版本號和當前日期

                            > SELECT VERSION(), CURRENT_DATE;

           刪除

                    刪除數據庫:刪庫需小心(MySQL沒有回收站)

                            > DROP {DATABASE | SCHEMA} 數據庫名稱;

                            > DROP {DATABASE | SCHEMA} [IF EXISTS] 數據庫名稱;

5.JPG

                     建議把不用的數據庫移動到其他位置,而不是刪除

                            # mv /var/lib/mysql/DATABASE_NAME /PATH/TO/DIRECTORY_NAME

6.JPG

7.JPG

 

     四、數據表管理

           創建

                    在數據庫內創建數據表

                            > USE 數據庫名稱;

                            > CREATE TABLE 數據表名稱 (字段1 數據類型 修飾符,字段2 數據類型 修飾符,字段3 數據類型 修飾符 ...) [table_option];

                        在創建數據表時還可以定義以下內容:

                            定義鍵

                                          主鍵:PRIMARY KEY (字段1, 字段2, ...)

                                          唯一鍵:UNIQUE KEY  (字段1, 字段2,...)

                                          外鍵:FOREIGN KEY (column)

                            定義索引

                                          KEY|INDEX [索引名稱] (字段1, 字段,...)

8.JPG

> CREATE TABLE server ( IDC_ROOM VARCHAR(3) NOT NULL,RACK_SLOT VARCHAR(10)NOT NULL ,SN VARCHAR(30) PRIMARY KEY,HOSTNAME VARCHAR(16) NOT NULL,MACHINE_TYPE VARCHAR(10) NOT NULL ) ;

                           table_option:

                              | ENGINE [=] engine_name 【定義存儲引擎】

                              | AUTO_INCREMENT [=] value 【設置默認自動增長數據從數字幾開始算,默認爲1

                              | [DEFAULT] CHARACTER SET [=] charset_name 【定義字符集,如不定義則從數據庫繼承】

                              | [DEFAULT] COLLATE [=] collation_name 【定義排序規則】

                              | COMMENT [=] 'string' 【定義數據表的註釋信息】

                              | MAX_ROWS [=] value 【定義最大行數】

                              | MIN_ROWS [=] value 【定義最小行數】

                              | PASSWORD [=] 'string' 【加密】

                             | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT} 【定義行格式】

                                         DEFAULT:默認格式

                                         DYNAMIC:動態格式

                                         FIXED:固定長度

                                         COMPRESSED:壓縮存儲

                                         REDUNDANT:冗餘存儲

                                         COMPACT:緊緻存儲

 

                           鍵類型可以在字段中指明

                                   > CREATE TABLE table1 (ID TINYINT NOT NULL AUTO_INCREMENT UNIQUE KEY,NAME VARCHAR(20) NOT NULL UNIQUE KEY);

                         也可以單獨指明:把多個字段聯合起來定義(多字段索引)

                                   > CREATE TABLE table2 (ID TINYINT NOT NULL AUTO_INCREMENT ,NAME VARCHAR(20) NOT NULL,UNIQUE KEY(ID,NAME));

                                                 注意:創建數據表的時候,表名不可使用"table"作爲其名稱

                  在指定數據庫中創建數據表

                            > CREATE TABLE 數據庫名稱.數據表名稱 (字段1 數據類型 修飾符,字段2 數據類型 修飾符,字段3 數據類型 修飾符 ...) [table_option];


           插入

                  向數據表中插入數據

                        一次插入一行

                                   > INSERT INTO [數據庫名稱.]數據表名稱(字段1,字段2,字段3 ...)

                        一次插入多行

                                   > INSERT INTO [數據庫名稱.]數據表名稱(字段1,字段2,字段3 ...) {VALUES | VALUE} (DATE1: '字段1的值','字段2的值',字段3的值' ...),(DATE2: '字段1的值','字段2的值','字段3的值' ...) ...;

注意

                                   (1) 使用INSERT語句,可以一次插入一行,也可以一次插入多行"(line1_data),(line2_data)..."

                                   (2) 如果想用INSERT語句插入空值時,可以直接用NULL

                    

                     替換表中已有數據:如果沒有數據,則插入;如果已有數據,則替換(支持單行插入、多行插入、給定字段插入或全字段插入)

                            > REPLACE [INTO] 數據表名稱(字段1,字段2,字段3 ...) VALUES ('字段1的值','字段2的值','字段3的值','字段4的值','字段5的值','字段6的值')[,(line2_data)...];

                 從文件中讀取數據並插入到表中:一個空表,填充它的一個簡易方法是創建一個文本文件,每條信息各一行,然後用一個語句將文件的內容裝載到表中

                            > LOAD DATA LOCAL INFILE '/PATH/TO/ FILE_NAME' INTO TABLE [數據庫名稱.]數據表名稱;

                      注意:如果需要填充空值時,使用\N(反斜線+字母N)表示

                       我演示的是從文件中導入到數據庫,表中的敏感數據我已修改

10.JPG

                 EXCEL表格中插入數據:http://www.slyar.com/blog/phpmyadmin-csv-mysql.html

           修改

                  修改數據表的名稱

                            > RENAME TABLE [數據庫名稱.]數據表名稱 TO database.新表名稱 ;

                            > ALTER TABLE [數據庫名稱.]數據表名稱 RENAME TO 數據庫名稱. 新表名稱;

11.JPG

                 修改註釋信息

                            > ALTER TABLE [數據庫名稱.]數據表名稱 COMMENT = 'annotation_information';

12.JPG

                     給表中添加一個新字段

                            > ALTER TABLE 數據表名稱 ADD 新字段名 數據類型 修飾符 [FIRST | AFTER 字段名];

                                   指明字段位置

                                          FIRST:添加到第一字段

                                          AFTER:添加到哪個字段後面

                                          如果不指定字段位置,則放在最後

13.JPG

                 修改字段名稱(CHANGE)

                            > ALTER TABLE 數據表名稱 CHANGE 原名稱 新名稱 原有屬性信息(數據類型、修飾符...;

                 修改/更新指定字段

                            > UPDATE [LOW_PRIORITY] [IGNORE] [數據庫名稱.]數據表名稱 SET 字段1=字段1的值[,字段2=字段2的值] ... WHERE where_condition [ORDER BY ...] [LIMIT row_count]

14.JPG

                         注意:用UPDATE修改行時必須使用WHERE子句指明條件(儘量指主鍵),否則將修改所有

           查詢

                    查詢當前數據庫中的數據表

                            > USE 數據庫名稱;

                            > SHOW TABLES;

                    查詢指定庫中的數據表

                            > SHOW TABLES IN 數據庫名稱;

                            > SHOW TABLES FROM 數據庫名稱;

                     查看數據表的詳細信息

                            > DESCRIBE [數據庫名稱.]數據表名稱;

                            > DESC [數據庫名稱.]數據表名稱;

15.JPG

                    查看數據表的狀態信息

                            > SHOW TABLE STATUS [LIKE '數據表名稱'];

                  查看數據表的狀態信息(垂直顯示)

                            > SHOW TABLE STATUS [LIKE '數據表名稱']\G;

                                          輸出內容說明

16.jpg

                   查看創建命令

                           > SHOW CREATE TABLE [數據庫名稱.]數據表名稱;

17.JPG

                 顯示以指定字符開頭的表的狀態

                            > SHOW TABLE STATUS WHERE Name LIKE '數據表名稱%'\G;

                 顯示指定時間創建的表

                            > SHOW TABLE STATUS WHERE Create_time LIKE '時間%'\G;

18.JPG

           SELECT語句:用來從數據表中檢索信息

                            > SELECT SELECT_EXPR FROM [數據庫名稱.]數據表名稱1,[數據表名稱2 ...] [WHERE where_condition];

SELECT語句的子句的執行過程

JPG.JPG

                           SELECT_EXPR

                                   *:所有字段(所有行,所有列)

                                   ALL

                                   字段1,字段2,字段3:投影;只顯示指定字段

                                   DISTINCT:相同的數據,只顯示一次

                                   field AS field_alias:給field取個別名field_alias

 

                            只查看錶中不同的數據

                                   > SELECT DISTINCT FROM [database_name.] 數據表1,[ 數據表2 ...];

                           查看指定表中所有字段(慎用)

                                   > SELECT * FROM [數據庫名稱.]數據表名稱1,[數據表名稱2 ...];

19.JPG

                            查看指定表中的指定列(如果表太大則不適合執行)

                                   > SELECT 字段1,字段2,字段3 ... FROM [數據庫名稱.]數據表名稱;

                      定義顯示的字段別名

                                   > SELECT 字段 AS 字段別名 FROM [數據庫名稱.]數據表名稱;

20.JPG

21.JPG

                           FROM子句:指定要查詢的關係

                                   單表查詢(簡單查詢):後面跟一個表名

                                   多表查詢:後面跟多個表名

                                   子查詢:後面跟WHERE子句

 

                            WHERE子句:選擇、指明條件;只輸出符合條件的行(重要)

                                   > SELECT 字段1,字段2,字段3 ... FROM [數據庫名稱.]數據表名稱 WHERE where_condition;

                                         where_condition

                                             操作符

BETWEEN x AND y

xy範圍之間的值

IS NULL

空值

IS NOT NULL

非空值

IN (LIST)

使用列表給出的值;用於離散取值

22.JPG

23.JPG

                                                算數運算

+

-

*

/

%

取模

                                                比較表達式

大於

小於

>=

大於等於

<=

小於等於

=

等於

!= <>

不等於

<=>

空值比較

24.JPG

                                           組合條件(邏輯運算)

AND (&&)

與;並且關係,既兩個條件同時滿足

OR (||)

或;或者關係,既兩個條件滿足一個

NOT (!)

非;條件不滿足即爲真

                                                            注意:ANDOR可以混用,但ANDOR具有更高的優先級。如果你使用兩個操作符,使用圓括號指明如何對條件進行分組是一個好主意( NOT xxx AND NOT xxx AND NOT xxx 等於NOT ( xxx OR xxx OR xxx ) )

25.JPG

                                       字符串比較

                                             通配符

                                                               LIKE '模式':支持使用“通配符”做模糊匹配

                                                                      %:任意長度的任意字符

                                                                      _:任意單個字符

26.JPG

                                             正則表達式

                                                               {RLIKE | REGEXP} '模式':基基於正則表達式做模式匹配;不用索引、效率低

                                                               正則表達式元字符:https://blog.51cto.com/zhangdaifu/1973716

                      排序(ORDER BY):將查詢到的結果排序顯示;如果表太大,排序操作極其消耗資源

                             > ORDER BY 字段名稱 {ASC | DESC}

                            升序:默認(ASC)

                                           > SELECT 字段1,字段2,字段3 ... FROM [數據庫名稱.]數據表名稱 ORDER BY字段名稱ASC;

                            降序(DESC)

                                           > SELECT 字段1,字段2,字段3 ... FROM [數據庫名稱.]數據表名稱 ORDER BY字段名稱DESC;

27.JPG

                                   注意:默認是區分字符大小寫的,如不想區分字符大小寫則執行“ORDER BY BINARY 字段名稱

                      LIMIT子句

                                   LIMIT [offset,]count

                                   LIMIT #:只顯示前#行的內容

                                   LIMIT x,y:忽略x行,顯示y行後的行

                                          x:偏移量

                                          y:偏移後取幾個值予以顯示

                                          > SELECT HOSTNAME FROM db2.server AS HOST  WHERE HOSTNAME RLIKE 'bjpg-[k].*$' LIMIT 3,1;

                             注意:在MySQL中字符串必須加引號,而數值一定不能加引號

                      聚合計算

                                   > SELECT 聚合計算函數 FROM [數據庫名稱.]數據表名稱;

                                   聚合計算函數

                                          AVG(字段名稱):求平均值

                                          MAX(字段名稱):求最大值

                                          MIN(字段名稱):求最小值

                                          SUM(字段名稱):求合

                                          COUNT(字段名稱):求個數之和

28.JPG

                      分組(GROUP BY):分組主要目的是爲了做聚合計算

                                   > SELECT * FROM [數據庫名稱.]數據表名稱 GROUP BY 'field_name';

                                   對分組進行過濾

                                          > HAVING conditions;

           複製

                    複製表結構

                            > CREATE TABLE 數據表名稱 LIKE原數據庫.原數據表;

                 複製表中的幾個字段並將其創建成一個新表(不會複製其屬性)

                            > CREATE TABLE 數據表名稱 SELECT 字段1,字段2,字段3 ... FROM 原數據庫.原數據表;

           刪除   

                 刪除表:刪表需小心(MySQL沒有回收站)

                            > DROP TABLE [IF EXISTS] [數據庫名稱.]數據表名稱;

                 刪除表中的行(DELETE)

                            > DELETE FROM [數據庫名稱.]數據表名稱 [WHERE where_condition];

                            > DELETE FROM 數據表名稱 [ORDER BY ...] [LIMIT row_count]

29.JPG

                           注意:用DELETE刪除行時必須使用WHERE子句,否則將清空整張表(DELETE FROM table_name)

                 先排序後刪除

                            > DELETE FROM [數據庫名稱.]table_name [WHERE where_condition] [ORDER BY '字段名' [DESC]]

                 刪除字段(列)

                            > ALTER TABLE 數據表名稱 DROP 字段名稱;

                 清空整張數據表

                            > TRUNCATE [數據表名稱.]數據表名稱;

 

     五、索引管理

             創建

                     創建索引

                            > CREATE {INDEX | INDEXES} 索引名稱 ON [數據庫名稱.]數據表名稱(字段1,字段2,字段3 ...);

30.JPG

                 創建多列索引

                            > CREATE UNIQUE {INDEX | INDEXES} 索引名稱 ON [數據庫名稱.]數據表名稱;      

                     給表中指定的字段加入索引

                            > ALTER TABLE [數據表名稱.]數據表名稱ADD INDEX(‘字段名稱’);

             查詢

                 查看錶中索引

                            > SHOW {INDEX | INDEXES} FROM [數據庫名稱.]數據表名稱;

31.JPG

          刪除:索引不用時,要立即刪除

                  刪除索引:這可能會導致查詢操作降低

                            > DROP {INDEX | INDEXES} 索引名稱 ON [數據庫名稱.]數據表名稱;

32.JPG

           注意:INDEX爲一個索引,INDEXES爲多個索引

 

     六、鍵管理

           創建

                 (1) 在數據表創建的時候定義主鍵

                 (2) 給已有的表中指定的字段加入主鍵

                            ALTER TABLE [數據庫名稱.]數據表名稱 ADD {PRIMARY KEY | UNIQUE KEY}(‘字段名稱’);

           修改

                     先刪除鍵,再添加鍵

           查詢

                    查詢主鍵

                        > SHOW KEYS FROM [數據庫名稱.]數據表名稱 WHERE key_name='PRIMARY';

           刪除

                     刪除鍵:不是自增長的纔可以刪除,如果是自增長(有auto_increment屬性)必須先將表中其他屬性刪除

                            > ALTER TABLE [數據庫名稱.]table_name DROP {PRIMARY KEY | UNIQUE KEY};

 

     七、用戶管理

           MySQL用戶和操作系統中的用戶不同;不能用MySQL用戶登錄操作系統,同樣也不能用操作系統用戶訪問MySQL

           用戶是公開的,大家都可以看到;而密碼只有某個授權使用用戶才能獲取

           MySQL使用自己獨有的加密機制password()函數加密用戶密碼

           MySQL默認管理員是root,和操作系統管理員名稱一致

           MySQL用戶由'用戶名'@'主機'共同組成

                     MySQL用戶名:不能超過16個字符

                 主機

                           主機名:zhangdaifu

                            IP地址:10.0.0.1

                           網絡地址:10.0.0.1/255.0.0.0

                                   支持使用通配符表示:10.%.%._/255.0.0.0

                                          如需表示通配符本身的含義則需要進行轉義\

           創建

                  創建用戶帳號

                            > CREATE USER 'user_name'@'host';

                    創建用戶賬號並設置其密碼

                            > CREATE USER 'user_name'@'host' IDENTIFIED BY 'password';

 

           修改

                  修改用戶名

                            > UPDATE mysql.user SET USER='new_username' WHERE User='old_username';

              查詢:MySQL用戶在mysql.user表中保存

                 查看所有用戶信息

                            > SELECT User,Host[, ...] FROM mysql.user;

                 查看指定用戶信息

                            > SELECT User,Host[, ...] FROM mysql.user WHERE User='user_name';

           刪除

                    刪除用戶帳號

                            > DROP USER 'user_name'[@'host' [, user_name@host] ...] ;

 

     八、密碼管理

           創建

                    給用戶配置密碼

                            爲當前登錄用戶配置密碼

                                   > SET PASSWORD = PASSWORD("password_of_user");

           修改

                    通過命令行修改

                            # mysqladmin -u'USER_NAME' -p'OLD_PASSWORD' password 'NEW_PASSWORD'

                     使用UPDATE直接編輯user 

                            > UPDATE mysql.user SET PASSWORD=password_of_user WHERE User='user_name';

                            刷新權限:flush privileges;

                  通過SET PASSWORD語句修改

                            > SET PASSWORD FOR user_name=password('password_of_user');

                     參考:https://blog.csdn.net/qq_33285112/article/details/78982766

           查詢

                     > SELECT User,Password FROM mysql.user WHERE User='user_name';

           刪除   

                    清除指定用戶密碼

                            > UPDATE mysql.user SET PASSWORD='' WHERE User='user_name'

 

     九、權限管理

           MySQL使用帳號的目的是爲了“認證”

           MySQL用戶信息存儲在以下表中

user

存儲了用戶的賬號、全局權限及其他非權限字段

db

數據庫級別的權限、庫級別的權限

host

已被廢棄,已被整合進user

tables_priv

表級別的權限

columns_priv

列(字段)級別的權限

procs_priv

存儲過程和存儲函數相關的權限

proxies_priv

代理用戶權限

                     MySQL服務器在啓動時會讀取這6張表,並在內存中生成“授權表”

           授權

                     權限級別:管理權限、數據庫、數據表、字段、存儲例程

                            > GRANT permissions_type,... ON [object_type] { [數據庫名稱.]數據表名稱 | function_name | procedure_name } TO 'user_name'@'host' [IDENTIFIED BY 'password'] [WITH GRANT OPTION];

                            > flush privileges

                                   permissions_type

                                          ALL:所有權限;不安全

                            database_name.table_name

                                         *.*:所有庫的所有表

                                       數據庫名稱.*:指定庫的所有表

                                   數據庫名稱.數據表名稱:指定庫的指定表

                                       數據庫名稱.routine_name:指定庫上的存儲過程或存儲函數

                                   [object_type]

                                      TABLE給數據表授權;默認

                                  FUNCTION給存儲函數授權

                                      PROCEDURE給存儲過程授權

                                  [WITH GRANT OPTION]將自己所擁有的權限轉權一個副本給其他用戶

 

           查詢

                     查看當前用戶所擁有的權限

                            > SHOW GRANTS;

                     查看指定用戶所擁有的權限

                            > SHOW GRANTS FOR 'user_name'@'permissions_type';

           刪除

                     回收授權

                            > REVOKE permissions_type[, ...] ON db_name.tb_name FROM 'user_name'@'host';

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

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

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

 

           檢查上一條語句是否正確執行(類似於Shell變量"$?"

                     > SHOW WARNINGS;

 

      常見錯誤

              (1) ERROR 1046 (3D000): No database selected

                     未選擇數據庫

              (2) ERROR 1050 (42S01): Table 'table1' already exists

                     'table1'已存在

              (3) ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

                     登錄數據庫沒有輸入密碼

              (4)   ERROR 1317 (70100): Query execution was interrupted

                     查詢執行被中斷

 

       更多參考: http://www.bluestep.cc/demos/mysql/manual/index.htm


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章