(有什么问题欢迎指教,企鹅:2172243813 更多资讯尽在通天源码论坛)
假如MySQL中的关键字在查询语句中作为列明或者表名出现,应该怎么处理。
例如
select desc from t;
一脸懵逼。尴尬。
于是乎,自己私下做了一个实验,发现了其中原因,特此分享。
创建t表,包含两个字段,id和desc
插入了三条数据
mysql> use test;
Database changed
mysql> select desc from t;
ERROR 1064 (42000): You have an error in your SQL syntax; check themanual that corresponds to your MySQL server version for the rightsyntax to use near 'desc from t' at line 1
果然出错了,其实出现这个错误的原因是desc这个单词是mysql数据库的关键字,所以sql语句执行到这里的时候觉得语句有问题。
处理方式,在列名字前后加上如下所示的符号
mysql> select `desc` from t;
+--------------+
|desc <div id="sina_keyword_ad_area2" newfont_family"=""> |
+--------------+
|23234 |
| klsadjflkasj |
|你好 |
+--------------+
3 rows in set (0.00 sec)<div newfont_family"="">
<div newfont_family"="">本文来自苦逼IT小子的新浪博客
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在MySQL中,如果遇到关键字与你的表名或列名冲突的情况,可以通过对表名或列名使用反引号(`
)来解决这个问题。反引号可以确保数据库正确解析这些可能与MySQL保留关键字冲突的标识符。
在您的例子中,desc
是一个保留关键字,它通常用于描述“降序”排序。因此,当您想查询名为 desc
的列时,需要这样写:
SELECT `desc` FROM t;
通过这种方式,MySQL将把 desc
视为列名而非关键字,从而正确执行查询。同样的规则也适用于其他任何可能与MySQL关键字冲突的表名或列名。记得,使用反引号包裹标识符是一个良好的实践,尤其是当你不确定某个名称是否为关键字时。