mysql中有關鍵字嗎

2022-06-21 14:00:33

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的朋友提供一些參考幫助。

ADDALLALTER
ANALYZEANDAS
ASCASENSITIVEBEFORE
BETWEENBIGINTBINARY
BLOBBOTHBY
CALLCASCADECASE
CHANGECHARCHARACTER
CHECKCOLLATECOLUMN
CONDITIONCONNECTIONCONSTRAINT
CONTINUECONVERTCREATE
CROSSCURRENT_DATECURRENT_TIME
CURRENT_TIMESTAMPCURRENT_USERCURSOR
DATABASEDATABASESDAY_HOUR
DAY_MICROSECONDDAY_MINUTEDAY_SECOND
DECDECIMALDECLARE
DEFAULTDELAYEDDELETE
DESCDESCRIBEDETERMINISTIC
DISTINCTDISTINCTROWp
DOUBLEDROPDUAL
EACHELSEELSEIF
ENCLOSEDESCAPEDEXISTS
EXITEXPLAINFALSE
FETCHFLOATFLOAT4
FLOAT8FORFORCE
FOREIGNFROMFULLTEXT
GOTOGRANTGROUP
HAVINGHIGH_PRIORITYHOUR_MICROSECOND
HOUR_MINUTEHOUR_SECONDIF
IGNOREININDEX
INFILEINNERINOUT
INSENSITIVEINSERTINT
INT1INT2INT3
INT4INT8INTEGER
INTERVALINTOIS
ITERATEJOINKEY
KEYSKILLLABEL
LEADINGLEAVELEFT
LIKELIMITLINEAR
LINESLOADLOCALTIME
LOCALTIMESTAMPLOCKLONG
LONGBLOBLONGTEXTLOOP
LOW_PRIORITYMATCHMEDIUMBLOB
MEDIUMINTMEDIUMTEXTMIDDLEINT
MINUTE_MICROSECONDMINUTE_SECONDMOD
MODIFIESNATURALNOT
NO_WRITE_TO_BINLOGNULLNUMERIC
ONOPTIMIZEOPTION
OPTIONALLYORORDER
OUTOUTEROUTFILE
PRECISIONPRIMARYPROCEDURE
PURGERAID0RANGE
READREADSREAL
REFERENCESREGEXPRELEASE
RENAMEREPEATREPLACE
REQUIRERESTRICTRETURN
REVOKERIGHTRLIKE
SCHEMASCHEMASSECOND_MICROSECOND
SELECTSENSITIVESEPARATOR
SETSHOWSMALLINT
SPATIALSPECIFICSQL
SQLEXCEPTIONSQLSTATESQLWARNING
SQL_BIG_RESULTSQL_CALC_FOUND_ROWSSQL_SMALL_RESULT
SSLSTARTINGSTRAIGHT_JOIN
TABLETERMINATEDTHEN
TINYBLOBTINYINTTINYTEXT
TOTRAILINGTRIGGER
TRUEUNDOUNION
UNIQUEUNLOCKUNSIGNED
UPDATEUSAGEUSE
USINGUTC_DATEUTC_TIME
UTC_TIMESTAMPVALUESVARBINARY
VARCHARVARCHARACTERVARYING
WHENWHEREWHILE
WITHWRITEX509
XORYEAR_MONTHZEROFILL

下面給大家列出一下常見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主要用於刪除結構,如刪除資料庫:DROP DATABASE 資料庫名,刪除表:DROP TABLE 表名,刪除欄位:ALTER TABLE 表名 DROP 欄位名
DUAL虛擬表在mysql5.1以上版本會有,感覺在ORACLE中才有用,因為在ORACLE中使用查詢必須要有FROM 表名,而在mysql中沒有表名不會報錯,如在mysql中SELECT 1+1 不會有問題但是在ORACLE中會報錯,這時要用SELECT 1+1 FROM DUAL,官方宣告:DUAL完全是為了方便那些要求所有SELECT語句都應該有FROM或other子句的人
EXISTS用於在WHERE後的判斷操作,其返回結果是一個布林值,使用方式是將現有行代入內查詢檢驗,如果內查詢中返回一行或是多行資料,則輸出本行資料,反之內查詢沒有資料則不輸出本行資料,如:SELECT * FROM user u WHERE EXISTS(SELECT * FROM untitled n WHERE n.friend_id=u.id)返回的是在untitled表中friend欄位可以與user表中的id相關聯的資料,也可以在EXISTS關鍵字前加NOT 返回的就是不關聯的資料了
EXPLAIN用檢視一個sql的執行,有沒有加入索引或是有沒有做全表掃描等,使用方式:在SELECT前加上,如EXPLAIN SELECT * FROM user
FULLTEXT全文索引,用於優化查詢速度,可以在建立表時加入FULLTEXT(欄位1, 欄位2),也可以在建立表之後單獨加入ALTER TABLE 表名 ADD FULLTEXT INDEX 索引名 (欄位名)需要注意的是新增索引是,表引擎要使用MyISAM不然會報錯The used table type doesn't support FULLTEXT indexes
GRANT用於使用者許可權操作,可以授權給使用者許可權或是刪除使用者許可權,操作方式有很多如:CREATE USER 'testUser'@'host' IDENTIFIED BY '123456';用於建立使用者,show grants for 'testUser'@'host';檢視使用者許可權等操作
GROUP用於分組操作,GROUP BY 欄位名 分組操作後要查詢的欄位必須要在GROUP BY之後新增不然會報錯,比較經典的用法如:SELECT friend_name , COUNT(friend_name) FROM untitled GROUP BY friend_name查詢某一型別的資料條數
HAVING用於在聚合後對資料進行篩選,與WHERE的區別在於,WHERE是在聚合前篩選資料的無法使用聚合函數如COUNT,SUM等,HAVING是在聚合後進行篩選的可以使用聚合函數,例如:SELECT friend_name , COUNT(friend_name) FROM untitled GROUP BY friend_name HAVING COUNT(friend_name) >1查詢的便是friend_name數量大於一的資料條數
HIGH_PRIORITY用於SELECT和INSERT語句,宣告此操作為高優先順序操作,資料庫會先執行此類操作,如:SELECT HIGH_PRIORITY * FROM user當同時存在多個操作時,這個語句優先執行
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會返回上一個資料的索引
ISmysql中的IS關鍵字僅用在 IS NULL或是IS NOT NULL中 如:SELECT * FROM USER where update_time IS NULL
JOIN用於連線兩張表,連線方式大致有內連線INNER JOIN,右連線RIGHT JOIN,左連線LEFT JOIN
KEYKEY是資料庫的物理結構,有兩層意義和作用:1:約束,2:索引,如主鍵的宣告PRIMARY KEY (id),,既會有唯一約束,又會自動新增索引
KILL用於終止mysql中的執行緒,可以使用SHOW PROCESSLIST檢視現在正在進行的執行緒,使用KILL 執行緒id終止執行緒,有兩個修改符1:CONNECTION 預設的修改符可以終止所有與該執行緒id有關的連線,2:QUERY 終止現在執行的語句,但不會終止連線
LABEL語句標籤
LEAVELeave語句表明退出指定標籤的流程控制語句塊,通常會用在begin…end,以及loop, repeat, while的迴圈語句中,就好像程式設計中的break一樣,使用方式LEAVE 迴圈名;
LEFTLEFT()函數是一個字串函數,它返回具有指定長度的字串的左邊部分。如: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)
WHILE迴圈語句關鍵詞,用在儲存過程中,需結合流程控制語句來使用,如: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


XOR表示邏輯互斥或,當任意一個運算元為NULL時,返回值為NULL,對於非NULL的運算元,如果兩個的邏輯真假值相異,則返回結果為1,否則為0,如:select true XOR null;select true XOR true;select true XOR false;
ZEROFILL當建立表時數值型別加上這個關鍵字後,如果插入數位位數不足則自動填充相應的位數,如:CREATE TABLE student3 ( id int(11) unsigned zerofill not null, xuehao int(50) NOT NULL );insert into student3 value(1,2); select * from student3;

【相關推薦:】

以上就是mysql中有關鍵字嗎的詳細內容,更多請關注TW511.COM其它相關文章!