为什么MySql告诉我,当我执行数据库表创建DDL时,字段名是保留关键字?

时间:2017-03-16 15:45:16

标签: mysql sql ddl

我正在将此表创建到MySql数据库中:

CREATE TABLE actors (
  id        BigInt UNSIGNED NOT NULL AUTO_INCREMENT,
  sample_id VarChar(128) NOT NULL,
  `role`    Char(2) NOT NULL,
  wiews     VarChar(16),
  pid       VarChar(16),
  `name`    VarChar(128),
  address   VarChar(128),
  country   Char(3), 
  PRIMARY KEY (
      id
  )
) ;
ALTER TABLE actors COMMENT = '';

当我执行上述DDL语句时,我收到以下2条错误消息:

  

名称“role”是保留关键字。您必须使用其他名称   名称“name”是保留关键字。您必须使用其他名称   使用数据库默认存储引擎(“InnoDB”)。

所以这意味着使用MySql我不能使用字段名角色名称,因为MySql是否保留了关键字?

问题是另一个人给我具体的创建这些表(包括字段的名称),因为我认为应用程序需要这个字段名称。

所以你确认我不能用这两个名字创建字段吗?

1 个答案:

答案 0 :(得分:0)

问题中的错误消息似乎不是来自MySQL,因为在MySQL中,有关在sql语句中非法使用关键字的错误消息会说:

  

错误1064(42000):您的SQL语法错误接近'角色...'

更不用说在问题中,namerole字段名称都用反引号(`)括起来。如果用反引号括起来,即使是保留字也可以用作对象标识符。

正如@St在评论中指出:代码在rextester

中运行

因此,我查看了Database Workbench 5文档,并在introducing the various editors部分中说明了:

  

对象编辑器还将检查保留关键字和SQL 92/99标准关键字,并且在将create语句发送到服务器之前,它将根据您的数据库引擎功能发出警告或错误。

结论:您的GUI检查sql语句中的保留字并阻止sql执行。如果您尝试通过其他GUI或CLI执行它,则不会出现任何错误。

如果可以禁用此设置或将其降级为警告,则可能需要查看Database Workbench 5文档。