对于我的生活,我不能,为了一个人:
弄清楚为什么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将列指定为唯一的):
我有其他表格定义完全相同的方式(相同的字段名称,定义属性),其中MySQL WB不会将UNIQUE
分配给列定义。每次我想在生产期间更新数据库时,都需要手动编辑sql脚本,这将非常繁琐。
UNIQUE
分配给此列的内容?答案 0 :(得分:0)
您无法将unique
放在tinyint
和unsigned
之间。这些都是类型定义的一部分。试试这个:
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'
);
我认为没有理由为主键设置默认值。也许你也想让它自动递增。