MySQL关键字

在使用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,数据库)