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

问题描述 投票:0回答:1

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

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

mariadb create-table unique-key
1个回答
0
投票

错误是因为定义有:

KEY `room_id` (`room_id`),

这本身不是问题,但是使用

UNIQUE
关键字,该表将创建为:

UNIQUE KEY `car_id` (`car_id`)

...所以

car_id
成为重复的键。

只需删除:

KEY `room_id` (`room_id`),

从定义来看,它将按预期工作。

请参阅此 dbfiddle 以及要删除注释掉的部分。其中包括重用汽车 ID 时出现的错误示例。

© www.soinside.com 2019 - 2024. All rights reserved.