我只想在我的数据库上创建一个新表,但这样做:
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
。
错误是因为定义有:
KEY `room_id` (`room_id`),
这本身不是问题,但是使用
UNIQUE
关键字,该表将创建为:
UNIQUE KEY `car_id` (`car_id`)
...所以
car_id
成为重复的键。
只需删除:
KEY `room_id` (`room_id`),
从定义来看,它将按预期工作。
请参阅此 dbfiddle 以及要删除注释掉的部分。其中包括重用汽车 ID 时出现的错误示例。