mysql中有没有关键字

84次阅读
没有评论

共计 8714 个字符,预计需要花费 22 分钟才能阅读完成。

这篇文章主要介绍“mysql 中有没有关键字”的相关知识,丸趣 TV 小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“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 的朋友提供一些参考帮助。

ADDALLALTERANALYZEANDASASCASENSITIVEBEFOREBETWEENBIGINTBINARYBLOBBOTHBYCALLCASCADECASECHANGECHARCHARACTERCHECKCOLLATECOLUMNCONDITIONCONNECTIONCONSTRAINTCONTINUECONVERTCREATECROSSCURRENT_DATECURRENT_TIMECURRENT_TIMESTAMPCURRENT_USERCURSORDATABASEDATABASESDAY_HOURDAY_MICROSECONDDAY_MINUTEDAY_SECONDDECDECIMALDECLAREDEFAULTDELAYEDDELETEDESCDESCRIBEDETERMINISTICDISTINCTDISTINCTROWpDOUBLEDROPDUALEACHELSEELSEIFENCLOSEDESCAPEDEXISTSEXITEXPLAINFALSEFETCHFLOATFLOAT4FLOAT8FORFORCEFOREIGNFROMFULLTEXTGOTOGRANTGROUPHAVINGHIGH_PRIORITYHOUR_MICROSECONDHOUR_MINUTEHOUR_SECONDIFIGNOREININDEXINFILEINNERINOUTINSENSITIVEINSERTINTINT1INT2INT3INT4INT8INTEGERINTERVALINTOISITERATEJOINKEYKEYSKILLLABELLEADINGLEAVELEFTLIKELIMITLINEARLINESLOADLOCALTIMELOCALTIMESTAMPLOCKLONGLONGBLOBLONGTEXTLOOPLOW_PRIORITYMATCHMEDIUMBLOBMEDIUMINTMEDIUMTEXTMIDDLEINTMINUTE_MICROSECONDMINUTE_SECONDMODMODIFIESNATURALNOTNO_WRITE_TO_BINLOGNULLNUMERICONOPTIMIZEOPTIONOPTIONALLYORORDEROUTOUTEROUTFILEPRECISIONPRIMARYPROCEDUREPURGERAID0RANGEREADREADSREALREFERENCESREGEXPRELEASERENAMEREPEATREPLACEREQUIRERESTRICTRETURNREVOKERIGHTRLIKESCHEMASCHEMASSECOND_MICROSECONDSELECTSENSITIVESEPARATORSETSHOWSMALLINTSPATIALSPECIFICSQLSQLEXCEPTIONSQLSTATESQLWARNINGSQL_BIG_RESULTSQL_CALC_FOUND_ROWSSQL_SMALL_RESULTSSLSTARTINGSTRAIGHT_JOINTABLETERMINATEDTHENTINYBLOBTINYINTTINYTEXTTOTRAILINGTRIGGERTRUEUNDOUNIONUNIQUEUNLOCKUNSIGNEDUPDATEUSAGEUSEUSINGUTC_DATEUTC_TIMEUTC_TIMESTAMPVALUESVARBINARYVARCHARVARCHARACTERVARYINGWHENWHEREWHILEWITHWRITEX509XORYEAR_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 userDISTINCTROW 用于联表查询的去重,可以查询出主表中关联的附表数据而不包含那些与查询出的主表不相关的数据,如 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 userFULLTEXT 全文索引,用于优化查询速度,可以在创建表时加入 FULLTEXT(字段 1, 字段 2),也可以在创建表之后单独加入 ALTER TABLE 表名 ADD FULLTEXT INDEX 索引名 (字段名)需要注意的是添加索引是,表引擎要使用 MyISAM 不然会报错 The used table type doesn t support FULLTEXT indexesGRANT 用于用户权限操作,可以授权给用户权限或是删除用户权限,操作方式有很多如: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_idINTERVAL 主要用于时间间隔,如: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 NULLJOIN 用于连接两张表,连接方式大致有内连接 INNER JOIN,右连接 RIGHT JOIN,左连接 LEFT JOINKEYKEY 是数据库的物理结构, 有两层意义和作用: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 userLIKE 用于模糊搜索,可以搭配 % 与_共同使用,% 代表查询一个或多个通配符,而_代表一个字符,如: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)返回余数 2NATURAL 自然连接,是 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 中有没有关键字”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注丸趣 TV 行业资讯频道,丸趣 TV 小编每天都会为大家更新不同的知识点。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计8714字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)