Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL Workbench将列设置为唯一,但是否应该?_Mysql_Sql_Database_Database Design_Mysql Workbench - Fatal编程技术网

MySQL Workbench将列设置为唯一,但是否应该?

MySQL Workbench将列设置为唯一,但是否应该?,mysql,sql,database,database-design,mysql-workbench,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 CH

为了我的生命,我不能,比如:

找出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
删除id列定义中的UNIQUE可使此语句无误地执行。但是,第二,为什么首先要创建它?我没有在MySQL Workbench中将其指定为唯一列,UQ将列指定为唯一列:

我用完全相同的方式定义了其他表,相同的字段名、定义属性,而MySQL WB没有为列定义分配唯一性。每次我想在生产过程中更新数据库时,都需要手动编辑sql脚本,这确实是一件乏味的事情

是不是有什么明显的原因让我忽略了MySQL WB为这个专栏指定了唯一性? 为什么“独特”在这里一开始看起来是非法的? 不能在tinyint和unsigned之间设置unique。这些都是类型定义的一部分。试试这个:

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'
);

我认为没有理由为主键设置默认值。也许你也希望它是自动递增的。

是的,我明白了。这也非常合理,列属性不应该与类型定义混合在一起。我猜workbench不知道这一点,这很奇怪,因为这种行为似乎早就被发现了,现在已经被纠正了。您是否知道是否有必要将主键指定为唯一的?