mysql保留关键字的一个小知识

mysql保留关键字的一个小知识,第1张

项目中一个表的字段,有三个字段名 desc , type , status 。这三个都是跟mysql的关键字重名,在写语句的时候都会标蓝。

但是有趣的是,执行的时候只有 desc 会报错

这是为什么?

我们查询mysql的关键字和保留字列表就能看到

虽然是允许的,但是我们使用的时候还是要尽量谨慎使用。

用逗引将关键字的字段引起来,insert into tb_test `use` values ('test')逗引就是数字键旁边的那个,在英文输入法下按下建议:数据库表的设计避过关键字。

如果sql语句中存在关键字,可以用反勾号(Esc下面的那个键)做转义;

` 是 MySQL 的转义符,避免和 mysql 的本身的关键字冲突,只要你不在列名、表名中使用 mysql 的保留字或中文,就不需要转义。

所有的数据库都有类似的设置,不过mysql用的是`而已。通常用来说明其中的内容是数据库名、表名、字段名,不是关键字。例如:select from from table

第一个from是字段名,最后的table表名,但是同时也是mysql关键字,这样执行的时候就会报错,所以应该使用。

但是这里要提一下的是mysql是支持使用关键字做字段名的,但是针对保留关键字是必须要加引用。mysql官网提供了三个例子是可以很好的说明这些的。

interval begin、end都是关键字,interval是保留关键字,因此会报错

mysql>CREATE TABLE interval (begin INT, end INT)

ERROR 1064 (42000): You have an error in your SQL syntax ...

near 'interval (begin INT, end INT)'

当给interval加上引用''后便可以正确执行该sql语句,也不会报begin、end的错,因为这是mysql允许的,但是不推荐这个用法,谁知道升级之后会不会变成保留字。。。。。。

mysql>CREATE TABLE `interval` (begin INT, end INT)

Query OK, 0 rows affected (0.01 sec)

(这个可以略过,,,,,反正不推荐使用关键字做这些事,)还有一种情况——内置函数的名字,官网是这样说的:

Names of built-in functions are permitted as identifiers but may require care to be used as such

mysql>CREATE TABLE mydb.interval (begin INT, end INT)

Query OK, 0 rows affected (0.01 sec)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7280851.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存