mysql中有關鍵字嗎

mysql中有關鍵字。mysql中提供了多種關鍵字:1、BETWEEN,用在WHERE語句之后的時間或者數(shù)字的范圍查詢;2、CALL,用于調用存儲過程;3、CURRENT_DATE,獲取當天日期;4、CURRENT_TIME,獲取當前時間;5、CURRENT_USER,返回MYSQL的用戶名;6、CURSOR,用于聲明mysql中的游標;7、DISTINCT,用于去除重復數(shù)據(jù)。

mysql中有關鍵字嗎

本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。

在使用MySQL的時候,一般盡量避免用關鍵字作為表名,如使用關鍵字做表名,需要按標準寫法給SQL語句加[](或是“)區(qū)分字段名和表名。

下面列出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 表名”查看表中的索引狀態(tài),當字段中不同值的數(shù)量大大多于表中CARDINALITY 數(shù)量時,索引基本沒有起作用,這時使用“ANALYZE TABLE 表名” 可以修復索引,再次使用“SHOW INDEX FROM 表名” 可以看到CARDINALITY 索引恢復正常
BETWEEN 用在WHERE之后的時間或者數(shù)字的范圍查詢,如 “SELECT * FROM USER WHERE CREATE BETWEEN ‘2020-11-20’ AND ‘2020-11-30’;” 查詢的是20號至30號之間的數(shù)據(jù),如果時間類型為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 創(chuàng)建時間字段時如果加入這段代碼代表新增數(shù)據(jù)時默認插入當前時間,創(chuàng)建字段時:“ create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP”
ON UPDATE CURRENT_TIMESTAMP 創(chuàng)建時間字段時如果加上這段代碼代表修改數(shù)據(jù)時默認會同步當前時間,創(chuàng)建字段時:“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 用于使用延遲插入操作,在執(zhí)行DELAYED聲明的語句時,數(shù)據(jù)庫會先返回狀態(tài)信息,然后將插入操作放入隊列,等待沒有操作隊列數(shù)據(jù)的指令便開始執(zhí)行隊列
DESCRIBE 用于查看數(shù)據(jù)表中字段的詳細設計,有兩種用法:1.DESCRIBE 表名查看所有字段。2.DESCRIBE 表名 字段名用于單獨查看字段
DISTINCT 去除重復的數(shù)據(jù),只能返回去重的數(shù)據(jù),必須是在查詢的第一個字段,常用來查詢某一字段有多少條不重復的數(shù)據(jù)。如SELECT count(DISTINCT name) FROM user
DISTINCTROW 用于聯(lián)表查詢的去重,可以查詢出主表中關聯(lián)的附表數(shù)據(jù)而不包含那些與查詢出的主表不相關的數(shù)據(jù),如SELECT DISTINCTROW user.id ,untitled.friend_name FROM user INNER JOIN untitled ON user.id = untitled.friend_id WHERE user.id = ‘1’;可以查詢出用戶id與相關聯(lián)的untitled表中的好友名稱,不包含沒有查詢的用戶的的好友
DROP 主要用于刪除結構,如刪除數(shù)據(jù)庫:DROP DATABASE 數(shù)據(jù)庫名,刪除表: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后的判斷操作,其返回結果是一個布爾值,使用方式是將現(xiàn)有行代入內查詢檢驗,如果內查詢中返回一行或是多行數(shù)據(jù),則輸出本行數(shù)據(jù),反之內查詢沒有數(shù)據(jù)則不輸出本行數(shù)據(jù),如:SELECT * FROM user u WHERE EXISTS(SELECT * FROM untitled n WHERE n.friend_id=u.id)返回的是在untitled表中friend字段可以與user表中的id相關聯(lián)的數(shù)據(jù),也可以在EXISTS關鍵字前加NOT 返回的就是不關聯(lián)的數(shù)據(jù)了
EXPLAIN 用查看一個sql的執(zhí)行,有沒有加入索引或是有沒有做全表掃描等,使用方式:在SELECT前加上,如EXPLAIN SELECT * FROM user
FULLTEXT 全文索引,用于優(yōu)化查詢速度,可以在創(chuàng)建表時加入FULLTEXT(字段1, 字段2),也可以在創(chuàng)建表之后單獨加入ALTER TABLE 表名 ADD FULLTEXT INDEX 索引名 (字段名)需要注意的是添加索引是,表引擎要使用MyISAM不然會報錯The used table type doesn’t support FULLTEXT indexes
GRANT 用于用戶權限操作,可以授權給用戶權限或是刪除用戶權限,操作方式有很多如:CREATE USER ‘testUser’@’host’ IDENTIFIED BY ‘123456’;用于創(chuàng)建用戶,show grants for ‘testUser’@’host’;查看用戶權限等操作
GROUP 用于分組操作,GROUP BY 字段名 分組操作后要查詢的字段必須要在GROUP BY之后添加不然會報錯,比較經典的用法如:SELECT friend_name , COUNT(friend_name) FROM untitled GROUP BY friend_name查詢某一類型的數(shù)據(jù)條數(shù)
HAVING 用于在聚合后對數(shù)據(jù)進行篩選,與WHERE的區(qū)別在于,WHERE是在聚合前篩選數(shù)據(jù)的無法使用聚合函數(shù)如COUNT,SUM等,HAVING是在聚合后進行篩選的可以使用聚合函數(shù),例如:SELECT friend_name , COUNT(friend_name) FROM untitled GROUP BY friend_name HAVING COUNT(friend_name) >1查詢的便是friend_name數(shù)量大于一的數(shù)據(jù)條數(shù)
HIGH_PRIORITY 用于SELECT和INSERT語句,聲明此操作為高優(yōu)先級操作,數(shù)據(jù)庫會先執(zhí)行此類操作,如:SELECT HIGH_PRIORITY * FROM user當同時存在多個操作時,這個語句優(yōu)先執(zhí)行
IGNORE 常用于批量插入時忽略報錯數(shù)據(jù),如:INSERT IGNORE INTO user (id,name,age) values(6,’pangqi’,25);如果主鍵id已存在則不會報錯,而是執(zhí)行下一段插入操作
INNER 用于內連接查詢,設定ON條件之后會將符合條件的數(shù)據(jù)全部展示出來,與左連接,右連接的區(qū)別在于:INNER沒有側重點,mysql會將符合條件的所有數(shù)據(jù)都查出來,所以使用時要小心不要出現(xiàn)出現(xiàn)笛卡爾積,另外由于INNER是mysql默認的連接方式,所以可以省略INNER關鍵字如:SELECT * FROM user JOIN untitled ON user.id = untitled.friend_id
INTERVAL 主要用于時間間隔,如:SELECT * FROM USER where create_time
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是數(shù)據(jù)庫的物理結構,有兩層意義和作用:1:約束,2:索引,如主鍵的聲明PRIMARY KEY (id),,既會有唯一約束,又會自動添加索引
KILL 用于終止mysql中的線程,可以使用SHOW PROCESSLIST查看現(xiàn)在正在進行的線程,使用KILL 線程id終止線程,有兩個修改符1:CONNECTION 默認的修改符可以終止所有與該線程id有關的連接,2:QUERY 終止現(xiàn)在執(zhí)行的語句,但不會終止連接
LABEL 語句標簽
LEAVE Leave語句表明退出指定標簽的流程控制語句塊,通常會用在begin…end,以及l(fā)oop, repeat, while的循環(huán)語句中,就好像編程中的break一樣,使用方式LEAVE 循環(huán)名;
LEFT LEFT()函數(shù)是一個字符串函數(shù),它返回具有指定長度的字符串的左邊部分。如:SELECT LEFT(name,3) FROM user
LIKE 用于模糊搜索,可以搭配%與_共同使用,%代表查詢一個或多個通配符,而_代表一個字符,如:SELECT * FROM user WHERE name LIKE ‘%i’可以查詢到所有name中以i結尾的數(shù)據(jù),將%換成_之后,查詢條件就變成了查詢name中以i結尾并且前面只有一個字符的數(shù)據(jù)
LIMIT 用于分頁查詢,如:SELECT * FROM user LIMIT 4,5 其中第一個參數(shù)為起始條數(shù) 如上例就是從第4條數(shù)據(jù)開始返回,第二個參數(shù)為偏移量如上例所示參數(shù)為5則表示返回從第4條的后5條數(shù)據(jù),之前偏移量可以為-1代表查詢起始條數(shù)后的所有數(shù)據(jù),但是這個寫法被mysql官方認定為一種錯誤,所以較新版的mysql都不能用了,最好的辦法就是給一個比較大的數(shù)字
LOCALTIME 當?shù)貢r間,可用做查詢結果字段,where條件,插入時的當前時間,更新時的時間等等,mysql有多種時間函數(shù),可根據(jù)需要選擇不同的函數(shù)使用,例:SELECT LOCALTIME,NOW(),sysdate(), localtimestamp, localtimestamp();
LOCK 鎖表與解鎖 MySQL使客戶端會話可以顯式獲取表鎖,以便與其他會話協(xié)作訪問表,或者防止其他會話在會話需要互斥訪問時修改表。會話只能為其自身獲取或釋放鎖。一個會話無法獲取另一會話的鎖,也不能釋放另一會話持有的鎖。例:LOCK table user read local此時會產生一個鎖表操作,所有執(zhí)行修改表的操作將會被拒絕并提示:Table ‘user’ was locked with a READ lock and can’t be updated,可以使用unlock tables;關鍵字解鎖
LOW_PRIORITY 低優(yōu)先級,MySQL允許你改變語句調度的優(yōu)先級,它可以使來自多個客戶端的查詢更好地協(xié)作,這樣單個客戶端就不會由于鎖定而等待很長時間。一般用于DELETE、INSERT、LOAD DATA、REPLACE和UPDATE語句中,例:update LOW_PRIORITY user set username = ‘zhangsan’在這種情況下,如果寫入者在等待的時候,第二個讀取者到達了,那么就允許第二個讀取者插到寫入者之前。只有在沒有其它的讀取者的時候,才允許寫入者開始操作。
MOD 取余函數(shù),如:select mod(12,5)返回余數(shù)2
NATURAL 自然連接,是JOIN 的一種,特點是將表中具有相同名稱的字段自動進行記錄匹配,而這些同名字段類型可以不同,所以表中字段的類型可以不同,可以應用在INNER ,LEFT 等JOIN中,例:select * from user NATURAL LEFT JOIN user2 在這里user與user2的區(qū)別是除了id之外user2字段后會加上1,這將導致連接時自動使用id進行關聯(lián),結果也確實如此
OPTIMIZE 作用:優(yōu)化整理整理表的碎片及索引,在數(shù)據(jù)庫存儲數(shù)據(jù)時數(shù)據(jù)庫會分配表空間,及索引給該數(shù)據(jù)當數(shù)據(jù)刪除后數(shù)據(jù)庫并不會收回這些資源而是等待新的數(shù)據(jù)填補這些空缺,使用OPTIMIZE關鍵字可以主動清除這些被占用的資源,用法:optimize table 表名稱
RANGE 分區(qū):基于一個給定的區(qū)間范圍,要求給定區(qū)間中這個字段的值是連續(xù)的,當執(zhí)行操作時會走相應的分區(qū),可以極大的提升效率,要求是如果該表有主鍵的話作為分區(qū)字段也應該在主鍵的行列,用法:建表語句+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 將給定數(shù)據(jù)當做字符串復制指定次數(shù)如:select REPEAT(3,3)得出的結果為“333”
REPLACE 替換所有的指定字符串,如:select REPLACE(‘這是一個字符串,或者是一個字符’,’一個’,’兩個’);
REVOKE 撤銷已經賦予給 MySQL 用戶權限,如:revoke all on *.* from testUser@host;記得完成后刷新用戶權限表FLUSH PRIVILEGES;
RIGHT 對字符串進行截位操作,如:select RIGHT(‘這是一個字符串’,5),會倒序截取指定位數(shù)的字符串
RLIKE 模糊查詢,與like不同的時,rlike的內容可以是正則,且可以不完全匹配,如:select * from user where email RLIKE ‘^www.*$’;
SEPARATOR 可將查詢結果用字符串連接變?yōu)橐恍?SEPARATOR指定連接符,需配合GROUP BY使用,如:SELECT *, GROUP_CONCAT(username order by username separator ‘;’) SCORE FROM user GROUP BY email RLIKE ‘^www.*$’
USING 連接查詢時如果是字段名相同則可以作為連接條件,using可以代替on出現(xiàn)如:select * from user left join students USING(quanxian)
WHILE 循環(huán)語句關鍵詞,用在存儲過程中,需結合流程控制語句來使用,如: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 表示邏輯異或,當任意一個操作數(shù)為NULL時,返回值為NULL,對于非NULL的操作數(shù),如果兩個的邏輯真假值相異,則返回結果為1,否則為0,如:select true XOR null;select true XOR true;select true XOR false;
ZEROFILL 當創(chuàng)建表時數(shù)值類型加上這個關鍵字后,如果插入數(shù)字位數(shù)不足則自動填充相應的位數(shù),如: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視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享