sql - 错误 1826 : Duplicate foreign key constraint name

标签 sql schema mysql-workbench

感谢您的时间。
我正在尝试使用以下说明构建数据库
T1-酒店(酒店编号,酒店名称,城市)
T2-Room ( roomNo , hotelNo, type, price)
T3-Guest ( guestNo , guestName, guestAddress)
T4-预订( 酒店编号 客人编号 dateFrom 、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'
有什么问题,如何纠正? Columns and keys
foreign keys

最佳答案

创建约束时,其名称是数据库范围的。
您可以使用以下命令列出数据库的所有约束:

select *
from information_schema.table_constraints
where constraint_schema = 'YOUR_DB'
您之所以出现此错误,是因为您选择将此表上的约束名称与 SAME 数据库的另一个表上的另一个约束名称相同。
例如,您可以使用表名作为约束名称的前缀,这样不同表的约束之间就不会再有针对相同 TargetTable.TargetColumn 的干扰。
问候。
蒂埃里·布雷马尔

关于sql - 错误 1826 : Duplicate foreign key constraint name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64322581/

相关文章:

php - 如果我删除所有特殊字符,Sql 注入(inject)的机会?

SQL 替换字段中的所有单词实例

sql - 具有默认值的新列未为旧记录设置

mysql workbench加载数据本地infile找不到文件或目录

mysql - 使用 MySQL 创建跨多个表的评分算法

java - 当 MySql Workbench 未运行时,Java 程序可以连接到数据库吗?

mysql - 同时从2个表中删除数据

c# - 确定是否从模式生成 ExecuteNonQuery 或 ExecuteReader

mysql - SQL中与外键的关系?

sql - 如何将 JSON 映射到 SQL 架构?