MySQL經常使用語句

      Hi,你們好,今天我給你們帶來的是「MariaDB(MySQL)經常使用語句的使用php


      說明html

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

              2、多數MySQL語句以";"結尾;若是結尾處不寫";"MySQL會等待輸入下一條語句,直到結尾有";"爲止正則表達式

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

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

 

舒適提示:使用電腦閱讀效果更佳數據庫

 

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)

設定哪一個庫爲默認數據庫

 

     1、登陸/退出MySQL

           登陸

                 登陸本地數據庫

                        匿名登陸

                                   # mysql [數據庫名稱]

                                   # mysql -p [數據庫名稱]

                           指定用戶登陸

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

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

                  遠程登陸數據庫

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

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

           退出

                     > exit

                     > quit

                     > \q

                     Ctrl+C

1.JPG

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

              > USE 數據庫名稱;

2.JPG

 

     3、數據庫管理

           建立

                 建立一個新的數據庫

                            > 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

 

     4、數據表管理

           建立

                    在數據庫內建立數據表

                            > USE 數據庫名稱;

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

                    MySQL數據類型參考:點我查看

                        在建立數據表時還能夠定義如下內容:

                            定義鍵

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

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

                                          外鍵:FOREIGN KEY (column)

                            定義索引

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

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 數據表名稱 (ID TINYINT NOT NULL AUTO_INCREMENT UNIQUE KEY,NAME VARCHAR(20) NOT NULL UNIQUE KEY);


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

                                   > CREATE TABLE 數據表名稱 (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表格中插入數據:點我查看

           修改

                  修改數據表的名稱

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

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

11.JPG

                 修改註釋信息

                            > ALTER TABLE [數據庫名稱.]數據表名稱 COMMENT = '註釋信息';

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 [數據庫名稱.] 數據表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} '模式':基基於正則表達式作模式匹配;不用索引、效率低

                                                               正則表達式元字符:點我查看

                      排序(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:偏移後取幾個值予以顯示

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

                      聚合計算

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

                                   聚合計算函數

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

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

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

                                          SUM(字段名稱):求合

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

28.JPG

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

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

                                   對分組進行過濾

                                          > 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 [數據庫名稱.]數據表名稱 [WHERE where_condition] [ORDER BY '字段名' [DESC]]

                 刪除字段(列)

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

                 清空整張數據表

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

 

     5、索引管理

             建立

                     建立索引

                            > 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爲多個索引

 

     6、鍵管理

           建立

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

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

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

           修改

                     先刪除鍵,再添加鍵

           查詢

                    查詢主鍵

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

           刪除

                     刪除鍵:不是自增加的才能夠刪除,若是是自增加(有auto_increment屬性)必須先將表中其餘屬性刪除

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

 

     7、用戶管理

           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 '用戶名'@'主機';

                    建立用戶帳號並設置其密碼

                            > CREATE USER '用戶名'@'主機' IDENTIFIED BY '密碼';

 

           修改

                  修改用戶名

                            > UPDATE mysql.user SET USER='新用戶名稱' WHERE User='用戶名';

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

                 查看全部用戶信息

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

                 查看指定用戶信息

                            > SELECT User,Host[, ...] FROM mysql.user WHERE User='用戶名';

           刪除

                    刪除用戶賬號

                            > DROP USER '用戶名'[@'主機' [, 用戶名@主機] ...] ;

 

     8、密碼管理

           建立

                    給用戶配置密碼

                            爲當前登陸用戶配置密碼

                                   > SET PASSWORD = PASSWORD("用戶的密碼");

           修改

                    經過命令行修改

                            # mysqladmin -u'用戶名' -p'老密碼' password '新密碼'

                     使用UPDATE直接編輯user 

                            > UPDATE mysql.user SET PASSWORD=用戶的密碼 WHERE User='用戶名';

                            刷新權限:flush privileges;

                  經過SET PASSWORD語句修改

                            > SET PASSWORD FOR 用戶名=PASSWORD('用戶的密碼');

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

           查詢

                     > SELECT User,Password FROM mysql.user WHERE User='用戶名';

           刪除   

                    清除指定用戶密碼

                            > UPDATE mysql.user SET PASSWORD='' WHERE User='用戶名'

 

     9、權限管理

           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

                                   權限類型

                                          ALL:全部權限;不安全

                            database_name.table_name

                                         *.*:全部庫的全部表

                                      數據庫.*:指定庫的全部表

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

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

                                   [object_type]

                                      TABLE給數據表受權;默認

                                  FUNCTION給存儲函數受權

                                      PROCEDURE給存儲過程受權

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

 

           查詢

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

                            > SHOW GRANTS;

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

                            > SHOW GRANTS FOR '用戶名'@'權限類型';

           刪除

                     回收受權

                            > REVOKE 權限類型[, ...] ON  [數據庫名稱.]數據表名稱 FROM '用戶名'@'主機';

           注意: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

相關文章
相關標籤/搜索