Mysql表结构中使用index的坑
我们知道在mysql的数据库建表时,有很多字段是不能够使用的,比如key和index等。这篇文章就以index为例来进行说明。
接收一个项目,其中一个字段的关键字为index,执行查询方法时出现如下异常信息:
Caused by: java.sql.SQLSyntaxErrorException: 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 'index,value,status,create_time,update_time FROM config WHERE grou' at line 1
起初看这个异常有些摸不着头脑,将SQL复制到客户端程序中,执行依旧出现问题:
SELECT id,group_id,index,value,status,create_time,update_time FROM config WHERE group_id = 1 AND status = '1' ORDER BY id DESC
于是就开始删减字段进行验证排查,发现是index与关键字冲突导致的。
针对这种情况,如果可以进来将表结构的字段进行修改,修改为非mysql的关键字。如果项目不允许修改,则可以用如下格式来表示字段:
'key' 或 'index'
针对上面的语句修改一下就是:
SELECT id,group_id,'index',value,status,create_time,update_time FROM config WHERE group_id = 1 AND status = '1' ORDER BY id DESC
而且凡是使用到该字段的地方都需要使用单引号,否则就会出现上面所展示的异常信息。
index在mysql中的含义
index是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。索引要分类的话,分为前缀索引、全文本索引等;
因此,索引只是索引,它不会去约束索引的字段的行为(那是key要做的事情)。如,create table t(id int,index inx_tx_id (id));
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接