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视频教程】
以上就是mysql中有关键字吗的详细内容,更多请关注php中文网其它相关文章!