我只是想在我的数据库上创建一个新表,但这样做:
CREATE TABLE `houses` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`room_id` int(11) NOT NULL,
`car_id` int(11) NOT NULL UNIQUE,
`name` varchar(128) NOT NULL,
`is_deleted` tinyint(1) DEFAULT 0,
`sell_at` datetime NULL DEFAULT NULL,
`created_at` datetime NOT NULL DEFAULT current_timestamp(),
`updated_at` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
PRIMARY KEY (`id`),
KEY `room_id` (`room_id`),
KEY `car_id` (`car_id`),
CONSTRAINT `houses_ibfk_1`
FOREIGN KEY (`room_id`)
REFERENCES `rooms` (`id`),
CONSTRAINT `houses_ibfk_2`
FOREIGN KEY (`car_id`)
REFERENCES `cars` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION
);
返回错误:
错误1061(42000):重复的密钥名称“car_id”
我在其他地方没有任何car_id
,即使在这个:
SELECT (
table_schema, table_name, constraint_name
) FROM information_schema.table_constraints
WHERE table_schema
ORDER by table_schema, table_name;
我做错了什么?是因为car_id的UNIQUE
属性吗?它没有工作,但我想确保每个房子的车是独一无二的(没有其他房子会使用它们)。
而且每个houses
的主人在购买(创建)他们的房子时都会有一个cars
。
1条答案
按热度按时间2fjabf4q1#
该错误是因为定义具有:
这本身并不是问题,但是将
UNIQUE
关键字应用于列,将创建表:.所以当两者都存在时,
car_id
成为重复的KEY
引用。只需移除:
它将按预期工作。
请参阅this dbfiddle,其中包含要删除的部件。其中包括一个重用汽车id的错误示例,以及创建的表定义的输出。