您好,登錄后才能下訂單哦!
這篇文章主要介紹“mysql中有沒有關鍵字”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“mysql中有沒有關鍵字”文章能幫助大家解決問題。
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 | AS |
ASC | ASENSITIVE | BEFORE |
BETWEEN | BIGINT | BINARY |
BLOB | BOTH | BY |
CALL | CASCADE | CASE |
CHANGE | CHAR | CHARACTER |
CHECK | COLLATE | COLUMN |
CONDITION | CONNECTION | CONSTRAINT |
CONTINUE | CONVERT | CREATE |
CROSS | CURRENT_DATE | CURRENT_TIME |
CURRENT_TIMESTAMP | CURRENT_USER | CURSOR |
DATABASE | DATABASES | DAY_HOUR |
DAY_MICROSECOND | DAY_MINUTE | DAY_SECOND |
DEC | DECIMAL | DECLARE |
DEFAULT | DELAYED | DELETE |
DESC | DESCRIBE | DETERMINISTIC |
DISTINCT | DISTINCTROW | p |
DOUBLE | DROP | DUAL |
EACH | ELSE | ELSEIF |
ENCLOSED | ESCAPED | EXISTS |
EXIT | EXPLAIN | FALSE |
FETCH | FLOAT | FLOAT4 |
FLOAT8 | FOR | FORCE |
FOREIGN | FROM | FULLTEXT |
GOTO | GRANT | GROUP |
HAVING | HIGH_PRIORITY | HOUR_MICROSECOND |
HOUR_MINUTE | HOUR_SECOND | IF |
IGNORE | IN | INDEX |
INFILE | INNER | INOUT |
INSENSITIVE | INSERT | INT |
INT1 | INT2 | INT3 |
INT4 | INT8 | INTEGER |
INTERVAL | INTO | IS |
ITERATE | JOIN | KEY |
KEYS | KILL | LABEL |
LEADING | LEAVE | LEFT |
LIKE | LIMIT | LINEAR |
LINES | LOAD | LOCALTIME |
LOCALTIMESTAMP | LOCK | LONG |
LONGBLOB | LONGTEXT | LOOP |
LOW_PRIORITY | MATCH | MEDIUMBLOB |
MEDIUMINT | MEDIUMTEXT | MIDDLEINT |
MINUTE_MICROSECOND | MINUTE_SECOND | MOD |
MODIFIES | NATURAL | NOT |
NO_WRITE_TO_BINLOG | NULL | NUMERIC |
ON | OPTIMIZE | OPTION |
OPTIONALLY | OR | ORDER |
OUT | OUTER | OUTFILE |
PRECISION | PRIMARY | PROCEDURE |
PURGE | RAID0 | RANGE |
READ | READS | REAL |
REFERENCES | REGEXP | RELEASE |
RENAME | REPEAT | REPLACE |
REQUIRE | RESTRICT | RETURN |
REVOKE | RIGHT | RLIKE |
SCHEMA | SCHEMAS | SECOND_MICROSECOND |
SELECT | SENSITIVE | SEPARATOR |
SET | SHOW | SMALLINT |
SPATIAL | SPECIFIC | SQL |
SQLEXCEPTION | SQLSTATE | SQLWARNING |
SQL_BIG_RESULT | SQL_CALC_FOUND_ROWS | SQL_SMALL_RESULT |
SSL | STARTING | STRAIGHT_JOIN |
TABLE | TERMINATED | THEN |
TINYBLOB | TINYINT | TINYTEXT |
TO | TRAILING | TRIGGER |
TRUE | UNDO | UNION |
UNIQUE | UNLOCK | UNSIGNED |
UPDATE | USAGE | USE |
USING | UTC_DATE | UTC_TIME |
UTC_TIMESTAMP | VALUES | VARBINARY |
VARCHAR | VARCHARACTER | VARYING |
WHEN | WHERE | WHILE |
WITH | WRITE | X509 |
XOR | YEAR_MONTH | ZEROFILL |
下面給大家列出一下常見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會返回上一個數據的索引 |
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 終止現在執行的語句,但不會終止連接 |
LABEL | 語句標簽 |
LEAVE | Leave語句表明退出指定標簽的流程控制語句塊,通常會用在begin…end,以及loop, repeat, while的循環語句中,就好像編程中的break一樣,使用方式LEAVE 循環名; |
LEFT | 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) |
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中有沒有關鍵字”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。