現(xiàn)在使用navicat圖形界面或者Hibernate做映射生成表的時(shí)候,漸漸的會(huì)忽視掉關(guān)鍵字這個(gè)問(wèn)題,而后續(xù)也會(huì)不斷的產(chǎn)生錯(cuò)誤提示,一遍遍的查詢代碼無(wú)果,甚至開(kāi)始懷疑人生,但是其實(shí)很多情況下只是使用了保留字而已,因此在設(shè)計(jì)數(shù)據(jù)庫(kù)之初便要盡量的規(guī)避關(guān)鍵字和保留字。
但是這里要提一下的是MySQL是支持使用關(guān)鍵字做字段名的,但是針對(duì)保留關(guān)鍵字是必須要加引用。mysql官網(wǎng)提供了三個(gè)例子是可以很好的說(shuō)明這些的。
interval begin、end都是關(guān)鍵字,interval是保留關(guān)鍵字,因此會(huì)報(bào)錯(cuò) 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)'
當(dāng)給interval加上引用''后便可以正確執(zhí)行該sql語(yǔ)句,也不會(huì)報(bào)begin、end的錯(cuò),因?yàn)檫@是mysql允許的,但是不推薦這個(gè)用法,誰(shuí)知道升級(jí)之后會(huì)不會(huì)變成保留字。。。。。。
mysql> CREATE TABLE `interval` (begin INT, end INT); Query OK, 0 rows affected (0.01 sec)
(這個(gè)可以略過(guò),,,,,反正不推薦使用關(guān)鍵字做這些事,)還有一種情況——內(nèi)置函數(shù)的名字,官網(wǎng)是這樣說(shuō)的:
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的關(guān)鍵字和保留字的表,可以在設(shè)計(jì)時(shí)多查一查,(R)是保留關(guān)鍵字
有些人可能還不明白關(guān)鍵字和保留字的區(qū)別,簡(jiǎn)單的說(shuō),關(guān)鍵字分兩種:非保留和保留,保留關(guān)鍵字又有一個(gè)特殊類別叫未來(lái)保留。
mysql5.7官方文檔地址:https://dev.mysql.com/doc/refman/5.7/en/keywords.html
解決辦法 https://blog.csdn.net/RightBeforeTheSix/article/details/80395920
1、看寫的SQL語(yǔ)句
insert into mrt_course(describe,price,add_time,class_id,is_top ) values ( '你好',25,1524313377,1,0)
2、問(wèn)題顯示 : 是MySQL的關(guān)鍵字,這樣插入會(huì)顯示以下錯(cuò)誤
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、解決方法,在關(guān)鍵字上加上英文的 `describe` ,就可以插入了;在Navicat里面寫的時(shí)候會(huì)自動(dòng)添加``
insert into mrt_course(`describe`,price,add_time,class_id,is_top ) values ( '你好',25,1524313377,1,0)