現在使用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)