mysql中有關鍵字。 mysql中提供了多種關鍵字:1、BETWEEN,用在WHERE語句之後的時間或數字的範圍查詢;2、CALL,用於呼叫預存程序;3、CURRENT_DATE,取得當天日期;4、CURRENT_TIME,取得目前時間;5、CURRENT_USER,傳回MYSQL的使用者名稱;6、CURSOR,用於宣告mysql中的遊標;7、DISTINCT,用於移除重複資料。
本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。
在使用MySQL的時候,一般盡量避免用關鍵字作為表名,如使用關鍵字做表名,需要按標準寫法給SQL語句加[](或是“)區分字段名和表名.
下面列出MySQL所有關鍵字,希望給使用MySQL的朋友一些參考幫助。
ADD | ALL | ALTER |
#ANALYZE | AND | |
#H | AS | |
ASC | 敏感 | #之前 |
之間 | BIGINT | |
BLOB | #BOTH | |
##CALL | CASCADE | CASE |
CHANGE | ##CHAR | CHARACTER |
#檢查 | 整理 | 列 |
條件 | 連接 | 約束 |
#繼續 | ||
建立 | #交叉 | |
CURRENT_TIME | CURRENT_TIMESTAMP | |
遊標 | ||
DAY_HOUR | DAY_SECOND | |
#DEC | DECIMAL | #聲明 |
預設 | ##刪除 | |
##DESC | ||
##DESC | #描述 | 確定性 |
DISTINCT | #DISTINCTROW | p |
DOUBLE | ||
DUAL | #EACH | |
ELSEIF | ||
封閉 | 逃脫 | 存在 |
#退出 | 解釋 | ##FALSE|
FLOAT | FLOAT4 | |
FOR | #FORCE | |
來自 | 全文 | |
##GRANT | GROUP | |
HIGH_PRIORITY | HOUR_MICROSECOND | |
# HOUR_SECOND | IF | |
#IN | INDEX | ##INFILE |
INOUT | 不敏感 | |
INT | INT1 | |
INT3 | INT4 | |
INTEGER | ||
#間隔 | 進入 | |
##加入 | ||
鑰匙 | 殺死 | |
#領先 | ##離開#左 | |
LIKE | LIMIT | #線性 |
LINES | 負載 | LOCALTIME |
LOCALTIMESTAMP | LOCK | ##LONG |
LONGBLOB | LONGTEXT | LOOP |
LOW_PRIORITY | MATCH | MEDIUMBLOB |
#MEDIUMINT | MEDIUMTEXT | MIDDLEINT |
MINUTE_MICROSECOND | MINUTE_SECOND | #MOD |
#修改 | 自然 | NOT |
#NO_WRITE_TO_BINLOG | NULL | #數字 |
ON | 優化 | 選項 |
#可選 | 或 | |
#訂單 | ||
輸出 | 外部 | 輸出檔案 |
#主要 | 程式 | |
RAID0 | ||
READS | REAL | |
#REGEXP | 發布 | |
重新命名 | 重複 | |
要求 | 限制 | |
RIGHT | RLIKE | |
SCHEMAS | SECOND_MICROSECOND |
下面要為大家列出一下常見mysql關鍵字的作用
關鍵字 | 作用 |
---|---|
#ANALYZE | 透過Analyze Table語句可以修復索引。使用「SHOW INDEX FROM 表名 」查看表中的索引狀態,當欄位中不同值的數量大大多於表中CARDINALITY 數量時,索引基本上沒有起作用,這時使用「 ANALYZE TABLE 表名 ” 可以修復索引,再次使用“SHOW INDEX FROM 表名 ” 可以看到CARDINALITY 索引恢復正常 |
BETWEEN | 用在WHERE之後的時間或數字的範圍查詢,如「SELECT * FROM USER WHERE CREATE BETWEEN '2020-11-20' AND '2020-11-30' ;」查詢的是20號至30號之間的資料,如果時間類型為DATETIME時查詢的範圍為00:00:00,例如上面的查詢語句中如果CREATE_TIME為DATETIME類型,查詢的範圍便是“ 2020-11-20 00:00:00 至2020-11-30 00:00:00” |
CALL | 用於呼叫儲存過程,如:CALL showUser()
|
CASCADE | 加入在約束之後,設定之後當刪除、更新主表時也會操作從表,例如: “ CONSTRAINT '用戶資訊' FOREIGN KEY (USER_NAME) REFERENCES TASK.USER (NAME) ON DELETE CASCADE ON UPDATE CASCADE #”,新增之後當使用者表修改使用者名稱後,從表的使用者名稱也會修改 |
CURRENT_DATE | 用於取得當天日期,如「SELECT CURRENT_DATE 」傳回的就是當天的日期 |
#CURRENT_TIME | 用於取得目前時間,如"SELECT CURRENT_TIME "傳回的就是目前的時分秒 |
#DEFAULT CURRENT_TIMESTAMP | 建立時間欄位時如果加入這段程式碼代表新增資料時預設插入目前時間,建立欄位時:「 create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP #」 |
#ON UPDATE CURRENT_TIMESTAMP | 建立時間欄位時如果加上這段程式碼代表修改資料時預設會同步目前時間,建立欄位時:「update_time timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP ” |
CURRENT_USER | 傳回MYSQL的使用者名稱 |
CURSOR | 用於宣告mysql中的遊標,用在預存過程中,有充當指標的作用,用法:「DECLARE 遊標名稱CURSOR FRO 查詢出的結果集 」 |
DECLARE | 用於在複合語句中宣告變量,如在預存過程中,可以使用SET 變數名稱= 值 這種方式重新賦值,範例中結果1是“測試”,結果1( 2)是「測試1」 |
DELAYED | 用於使用延遲插入操作,在執行DELAYED聲明的語句時,資料庫會先傳回狀態信息,然後將插入操作放入佇列,等待沒有操作佇列資料的指令開始執行佇列 |
DESCRIBE | 用於檢視資料表中欄位的詳細設計,有兩種用法:1.DESCRIBE 表名 查看所有欄位。2.DESCRIBE 表名字段名 用於單獨查看字段 |
#DISTINCT | 去除重複的數據,只能返回去重的數據,必須是在查詢的第一個字段,常用來查詢某一字段有多少條不重複的資料。如SELECT COUNT(DISTINCT name) FROM user
|
#DISTINCTROW | ##用於聯表查詢的去重,可以查詢出主表中關聯的附表數據而不包含那些與查詢出的主表不相關的數據,如SELECT DISTINCTROW user.id ,untitled.friend_name FROM user INNER JOIN untitled ON user.id = untitled.friend_id WHERE user.id = '1';可以查詢出使用者id與相關聯的untitled表中的好友名稱,不包含沒有查詢的使用者的朋友
|
主要用於刪除結構,如刪除資料庫: | DROP DATABASE 資料庫名稱,刪除表: DROP TABLE 表格名稱,刪除欄位: ALTER TABLE 表格名稱DROP 欄位名稱
|
虛擬表在mysql5.1以上版本會有,感覺在ORACLE中才有用,因為在ORACLE中使用查詢必須要有FROM 表名,而在mysql中沒有表名不會報錯,如在mysql中 | SELECT 1 1 不會有問題但是在ORACLE中會報錯,這時要用 SELECT 1 1 FROM DUAL,官方聲明: DUAL完全是為了方便那些要求所有SELECT語句都應該有FROM或other子句的人
|
#用於在WHERE後的判斷操作,其返回結果是一個布林值,使用方式是將現有行代入內查詢檢驗,如果內查詢中返回一行或是多行數據,則輸出本行數據,反之內查詢沒有資料則不輸出本行數據,如: | SELECT * FROM user u WHERE EXISTS(SELECT * FROM untitled n WHERE n.friend_id=u.id)傳回的是在untitled表中friend欄位可以與user表中的id相關聯的資料,也可以在EXISTS關鍵字前加NOT 回傳的就是不關聯的資料了
|
用檢視一個sql的執行,有沒有加入索引或是有沒有做全表掃描等,使用方式:在SELECT前加上,如 | EXPLAIN SELECT * FROM user
|
全文索引,用於最佳化查詢速度,可以在建立表格時加入 | FULLTEXT(欄位1, 欄位2),也可以在建立表格之後單獨加入ALTER TABLE 表名ADD FULLTEXT INDEX 索引名( 字段名) 需要注意的是添加索引是,表引擎要使用MyISAM不然會報錯The used table type doesn't support FULLTEXT indexes
|
用於使用者權限操作,可以授權給使用者權限或是刪除使用者權限,操作方式有很多如: | CREATE USER 'testUser'@'host' IDENTIFIED BY '123456';用於建立用戶,show grants for 'testUser'@'host'; 查看用戶權限等操作
|
用於分組操作, | GROUP BY 字段名 分組操作後要查詢的字段必須要在GROUP BY之後添加不然會報錯,比較經典的用法如:SELECT friend_name , COUNT(friend_name) FROM untitled GROUP BY friend_name 查詢某一類型的資料條數
|
用於在聚合後對資料進行篩選,與WHERE的區別在於,WHERE是在聚合前篩選資料的無法使用聚合函數如COUNT,SUM等,HAVING是在聚合後進行篩選的可以使用聚合函數,例如: | SELECT friend_name , COUNT(friend_name) FROM untitled GROUP BY friend_name HAVING COUNT(friend_name) >1查詢的便是friend_name數量大於一的資料行數
|
當同時存在多個操作時,這個語句優先執行 | |
IGNORE | 常用於批次插入時忽略報錯數據,如:INSERT IGNORE INTO user (id,name,age) values(6,'pangqi',25); 如果主鍵id已存在則不會報錯,而是執行下一段插入操作 |
INNER | 用於內連接查詢,設定ON條件之後會將符合條件的數據全部展示出來,與左連接,右連接的區別在於:INNER沒有側重點,mysql會將符合條件的所有數據都查出來,所以使用時要小心不要出現出現笛卡爾積,另外由於INNER是mysql預設的連接方式,所以可以省略INNER關鍵字如:SELECT * FROM user JOIN untitled ON user.id = untitled.friend_id
|
#INTERVAL | 主要用於時間間隔,如:SELECT * FROM USER where create_time < NOW()-INTERVAL 4 DAY 傳回的是建立時間在四天前的數據,也可以將DAY替換為小時,分鐘,年月等,還可以用來比較資料如:SELECT INTERVAL(6,1,2,3,4,7,8,9,10) 會回傳4,因為在比較時mysql會用索引為0的數據來比較接下來的數據,當接下來的數據大於索引為0的數據時,mysql會傳回上一個數據的索引 |
IS | mysql中的IS關鍵字只用在IS NULL 或是IS NOT NULL 中如:SELECT * FROM USER where update_time IS NULL |
JOIN | 用於連接兩張表,連接方式大致有內連接INNER JOIN ,右邊連接RIGHT JOIN ,左連接LEFT JOIN |
#KEY | KEY是資料庫的物理結構,有兩層意義和作用:1:約束,2:索引,如主鍵的宣告PRIMARY KEY (id), ,既會有唯一約束,又會自動加入索引 |
KILL | 用於終止mysql中的線程,可以使用SHOW PROCESSLIST 查看現在正在進行的線程,使用KILL 線程id 終止線程,有兩個修改符1:CONNECTION 默認的修改子可以終止所有與該執行緒id相關的連接,2:QUERY 終止現在執行的語句,但不會終止連接 |
##語句標籤 | |
Leave語句表示退出指定標籤的流程控制語句區塊,通常會用在begin…end,以及loop, repeat, while的迴圈語句中,就好像程式設計中的break一樣,使用方式 | LEAVE 迴圈名稱;
|
LEFT()函數是字串函數,它傳回具有指定長度的字串的左邊部分。如:SELECT LEFT(name,3) FROM user | |
#LIKE | 用於模糊搜索,可以搭配%與_共同使用,%代表查詢一個或多個通配符,而_代表一個字符,如:SELECT * FROM user WHERE name LIKE '%i' 可以查詢到所有name中以i結尾的數據,將%換成_之後,查詢條件就變成了查詢name中以i結尾並且前面只有一個字元的資料 |
#LIMIT | 用於分頁查詢,如: SELECT * FROM user LIMIT 4,5 其中第一個參數為起始條數如上例就是從第4條資料開始返回,第二個參數為偏移量如上例所示參數為5則表示返回從第4條的後5條數據,之前偏移量可以為-1代表查詢起始條數後的所有數據,但是這個寫法被mysql官方認定為一種錯誤,所以較新版的mysql都不能用了,最好的方法就是給一個比較大的數字 |
LOCALTIME | 當地時間,可用做查詢結果字段,where條件,插入時的當前時間,更新時的時間等等,mysql有多種時間函數,可依需求選擇不同的函數使用,例:SELECT LOCALTIME,NOW(),sysdate(), localtimestamp, localtimestamp(); |
#LOCK | 鎖定表與解鎖MySQL使用戶端會話可以明確取得表鎖,以便與其他會話協作存取表,或防止其他會話在會話需要互斥訪問時修改表。會話只能為其自身取得或釋放鎖定。一個會話無法取得另一個會話的鎖,也不能釋放另一個會話持有的鎖。範例:LOCK table user read local 此時會產生一個鎖表操作,所有執行修改表的操作將會被拒絕並提示:Table 'user' was locked with a READ lock and can 't be updated ,可以使用unlock tables; 關鍵字解鎖 |
LOW_PRIORITY | 低優先級,MySQL允許你改變語句調度的優先級,它可以使來自多個客戶端的查詢更好地協作,這樣單一客戶端就不會因為鎖定而等待很長時間。一般用於DELETE、INSERT、LOAD DATA、REPLACE和UPDATE語句中,例:update LOW_PRIORITY user set username = 'zhangsan' 在這種情況下,如果寫入者在等待的時候,第二個讀取者到達了,那麼就允許第二個讀取者插到寫入者之前。只有在沒有其它的讀取者的時候,才允許寫入者開始操作。 |
MOD | 取餘函數,如:select mod(12,5) 傳回餘數2 |
NATURAL | 自然連接,是JOIN 的一種,特點是將表中具有相同名稱的欄位自動進行記錄匹配,而這些同名欄位類型可以不同,所以表格中欄位的類型可以不同,可以應用在INNER ,LEFT 等JOIN中,例:select * from user NATURAL LEFT JOIN user2 在這裡user與user2的區別是除了id之外user2字段後會加上1,這將導致連接時自動使用id進行關聯,結果確實如此 |
OPTIMIZE | 作用:優化整理整理表的碎片及索引,在資料庫儲存資料時資料庫會分配表空間,及索引給該資料當資料刪除後資料庫並不會收回這些資源而是等待新的資料填補這些空缺,使用OPTIMIZE關鍵字可以主動清除這些被佔用的資源,用法:optimize table 表名稱 |
RANGE | 分區:基於一個給定的區間範圍,要求給定區間中這個欄位的值是連續的,當執行操作時會走對應的分區,可以極大的提升效率,要求是如果該表有主鍵的話作為分區字段也應該在主鍵的行列,用法:建表語句PARTITION BY RANGE (xuehao) (PARTITION p0 VALUES LESS THAN (6 ),PARTITION p1 VALUES LESS THAN (11),PARTITION p2 VALUES LESS THAN (16), PARTITION p3 VALUES LESS THAN (21)); |
REFERENCES | 建立外鍵關係,在建表語句中:FOREIGN KEY(uid) REFERENCES users(id) 意思是指字段uid將和user表的主鍵字段id相連接 |
#REGEXP | 正規表示式,可以在條件中使用正規表示式進行操作,使用SELECT * FROM user WHERE email NOT REGEXP'^[A-Z0-9._%-] @[A-Z0-9.-] .[A-Z]{2,4}$' |
RENAME | 修改表名稱,使用:rename table user2 to user3; |
REPEAT | 將給定資料當做字串複製指定次數如:select REPEAT(3,3) 的結果為「333」 |
#REPLACE | 取代所有的指定字串,如:select REPLACE('這是一個字串,或是一個字元','一個','兩個') ; |
REVOKE | 撤銷已賦予給MySQL 使用者權限,如:revoke all on *.* from testUser@host; 記得完成後刷新使用者權限表FLUSH PRIVILEGES; |
#RIGHT | 對字串進行截位操作,如:select RIGHT ('這是字串',5) ,會倒序截取指定位數的字串 |
#RLIKE | 模糊查詢,與like不同的時,rlike的內容可以是正規則,且可以不完全匹配,如:select * from user where email RLIKE '^www.*$'; |
SEPARATOR | 可將查詢結果以字串連接變為一行,SEPARATOR指定連接符號,需配合GROUP BY使用,如:SELECT *, GROUP_CONCAT(username order by username separator ';') SCORE FROM user GROUP BY email RLIKE '^www.*$' |
#USING | 連接查詢時如果是欄位名稱相同則可以作為連接條件,using可以代替on出現如:select * from user left join students USING(quanxian) |
#循環語句關鍵字,用在存儲過程中,需結合流程控制語句來使用,如: | CREATE PROCEDURE fun() BEGIN SET @sum:=10; WHILE @sum > 0 DO SELECT @sum; SET @sum:=@sum-1; END WHILE; END CALL fun(); DROP PROCEDURE fun
|
|
|
|
以上是mysql中有關鍵字嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!