San*_*ago 3 sql schema mysql-workbench
感谢您的时间。我正在尝试使用以下说明构建数据库
T1-酒店(hotelNo、hotelName、城市) T2-Room(roomNo、hotelNo、类型、价格) T3-Guest(guestNo、guestName、guestAddress) T4-预订(hotelNo、guestNo、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);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误 ERROR 1826: Duplicate foreign key constraint name 'hotelNo' 出了什么问题,如何纠正?
创建约束时,其名称是数据库范围的。您可以使用以下命令列出数据库的所有约束:
select *
from information_schema.table_constraints
where constraint_schema = 'YOUR_DB'
Run Code Online (Sandbox Code Playgroud)
你有这个错误是因为你选择给这个表上的约束名称与 SAME 数据库的另一个表上的另一个约束相同的名称。例如,您可以使用表名作为约束名称的前缀,这样不同表的约束之间就不会再有针对相同 TargetTable.TargetColumn 的干扰。
问候。蒂埃里·布雷马尔
小智 3
您的constraint_name与您的列名称相同,导致重复/歧义将您的外键约束名称更改为其他名称,例如constraint hello1... 与您的列名称不同的名称
CONSTRAINT `hotelNo1`
FOREIGN KEY (`hotelNo`)
Run Code Online (Sandbox Code Playgroud)
对于其他人也同样如此