MySQL Workbench将列设置为唯一,但是否应该?
为了我的生命,我不能,比如: 找出MySQL抱怨此INSERT语句的原因: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
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不知道这一点,这很奇怪,因为这种行为似乎早就被发现了,现在已经被纠正了。您是否知道是否有必要将主键指定为唯一的?