在MariaDB上创建的表的属性上有重复的键名

vs3odd8k  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(51)

我只是想在我的数据库上创建一个新表,但这样做:

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

2fjabf4q

2fjabf4q1#

该错误是因为定义具有:

KEY `car_id` (`car_id`),

这本身并不是问题,但是将UNIQUE关键字应用于列,将创建表:

UNIQUE KEY `car_id` (`car_id`)

.所以当两者都存在时,car_id成为重复的KEY引用。
只需移除:

KEY `car_id` (`car_id`),

它将按预期工作。
请参阅this dbfiddle,其中包含要删除的部件。其中包括一个重用汽车id的错误示例,以及创建的表定义的输出。

相关问题