MySQL Workbench设置列为UNIQUE,但应该吗?

时间:2014-06-05 02:31:23

标签: mysql sql database database-design mysql-workbench

对于我的生活,我不能,为了一个人:

弄清楚为什么MySQL抱怨这个INSERT声明:

CREATE TABLE IF NOT EXISTS `mangobase`.`profile_education` (
  `id` TINYINT UNIQUE UNSIGNED NOT NULL DEFAULT 0,
  `description` VARCHAR(50) NOT NULL DEFAULT 'xxx',
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;

投诉:

ERROR 1064 (42000) at line 91: 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 'UNSIGNED NOT NULL DEFAULT 0,
  `description` VARCHAR(50) NOT NULL DEFAULT 'xxx',' at line 2

删除UNIQUE列定义中的id允许此语句无错误地通过。但是,其次,为什么它首先被创造出来?我没有将它指定为MySQL Workbench中的唯一列(UQ将列指定为唯一的):

Table as defined in MySQL Workbench

我有其他表格定义完全相同的方式(相同的字段名称,定义属性),其中MySQL WB不会将UNIQUE分配给列定义。每次我想在生产期间更新数据库时,都需要手动编辑sql脚本,这将非常繁琐。

  1. 是否有一些明显的东西我忽略了导致MySQL WB将UNIQUE分配给此列的内容?
  2. 为什么' UNIQUE`首先在这里看似非法?

1 个答案:

答案 0 :(得分:0)

您无法将unique放在tinyintunsigned之间。这些都是类型定义的一部分。试试这个:

CREATE TABLE IF NOT EXISTS `mangobase`.`profile_education` (
  `id` TINYINT UNSIGNED UNIQUE NOT NULL DEFAULT 0,
  `description` VARCHAR(50) NOT NULL DEFAULT 'xxx',
  PRIMARY KEY (`id`)
);

编辑:

您无需将主键指定为唯一键。我会把它写成:

CREATE TABLE IF NOT EXISTS `mangobase`.`profile_education` (
  `id` TINYINT UNSIGNED UNIQUE NOT NULL PRIMARY KEY,
  `description` VARCHAR(50) NOT NULL DEFAULT 'xxx'
);

我认为没有理由为主键设置默认值。也许你也想让它自动递增。