4

感谢您的时间。我正在尝试使用以下说明构建数据库

T1-Hotel(hotelNo,hotelName,city) T2-Room(roomNo,hotelNo,类型,价格) T3-Guest(guestNo,guestName,guestAddress) T4-Booking(hotelNoguestNodateFrom,dateTo,roomNo)

我收到一个约束重复错误,但我无法判断架构中有重复。

CREATE TABLE `hotel_booking`.`Booking` (
    `hotelNo` VARCHAR(5) NOT NULL,
    `guestNo` VARCHAR(5) NOT NULL,
    `datefFrom` DATE NOT NULL,
    `dateTo` DATE NULL,
    `roomNo` VARCHAR(5) NULL,
    PRIMARY KEY (`hotelNo`, `guestNo`, `datefFrom`),
    INDEX `guestNo_idx` (`guestNo` ASC) VISIBLE,
    INDEX `roomNo_idx` (`roomNo` ASC) VISIBLE,
    CONSTRAINT `hotelNo`
        FOREIGN KEY (`hotelNo`)
        REFERENCES `hotel_booking`.`Hotel` (`hotelNo`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
    CONSTRAINT `guestNo`
        FOREIGN KEY (`guestNo`)
        REFERENCES `hotel_booking`.`Guest` (`guestNo`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
    CONSTRAINT `roomNo`
        FOREIGN KEY (`roomNo`)
        REFERENCES `hotel_booking`.`Room` (`roonNo`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION);

我收到以下错误 ERROR 1826: Duplicate foreign key constraint name 'hotelNo' 出了什么问题以及如何纠正?列和键

外键

4

2 回答 2

7

当您创建一个约束时,它的名称是数据库范围的。您可以列出数据库的所有约束:

select *
from information_schema.table_constraints
where constraint_schema = 'YOUR_DB'

出现此错误是因为您选择将此表上的约束名称与 SAME 数据库的另一个表上的另一个约束名称相同。例如,您可以在约束名称前加上表的名称,这样不同表的约束之间就不会再针对相同的 TargetTable.TargetColumn 产生干扰。

问候。蒂埃里·布雷马尔

于 2021-01-06T09:19:16.710 回答
1

您的 constraint_name 与您的列名相同,导致重复/歧义将您的外键约束名称更改constraint hello1... 为与您的列名不同的其他名称

  CONSTRAINT `hotelNo1`
    FOREIGN KEY (`hotelNo`)

对其他人也是如此

于 2020-10-12T17:54:25.800 回答