<返回更多

MySQL报错找不到问题?可能是你的SQL用了关键字

2019-10-14    
加入收藏
MySQL报错找不到问题?可能是你的SQL用了关键字

 

现在使用navicat图形界面或者Hibernate做映射生成表的时候,渐渐的会忽视掉关键字这个问题,而后续也会不断的产生错误提示,一遍遍的查询代码无果,甚至开始怀疑人生,但是其实很多情况下只是使用了保留字而已,因此在设计数据库之初便要尽量的规避关键字和保留字。

但是这里要提一下的是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)

下面的链接是最新版的mysql的关键字和保留字的表,可以在设计时多查一查,(R)是保留关键字

有些人可能还不明白关键字和保留字的区别,简单的说,关键字分两种:非保留和保留,保留关键字又有一个特殊类别叫未来保留。

mysql5.7官方文档地址:https://dev.mysql.com/doc/refman/5.7/en/keywords.html

解决办法 https://blog.csdn.net/RightBeforeTheSix/article/details/80395920

1、看写的SQL语句

insert into mrt_course(describe,price,add_time,class_id,is_top ) values ( '你好',25,1524313377,1,0)

2、问题显示 : 是MySQL的关键字,这样插入会显示以下错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'describe,price,add_time,class_id,status,is_top ) values ( '你好',25,1524313377' at line 1

3、解决方法,在关键字上加上英文的 `describe` ,就可以插入了;在Navicat里面写的时候会自动添加``

insert into mrt_course(`describe`,price,add_time,class_id,is_top ) values ( '你好',25,1524313377,1,0)

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>