gpt4 book ai didi

mysql - 每个表两个四个外键不能引用主表中的单个主键

转载 作者:行者123 更新时间:2023-11-29 14:30:16 26 4
gpt4 key购买 nike

美好的一天

我正在尝试解决三个表之间的外键关系问题。基本上我有两个辅助表,每个辅助表都有两个外键,每个外键引用第三个表中的单个主键。

由于数据库的复杂性、大小和可能的版权问题,同样的问题也会发生在更大的数据库中。我别无选择,只能隔离问题并创建一个会导致相同问题的副本。但是,如果您必须知道,引用主表 People 的相同两个表只是相关数据库中数十个同类表中的两个表。

我希望有人能够指出问题,也许提供一个不会对当前结构产生太大影响的解决方案,这样我就可以自己应用它,可能适用于所有其他表,因为从我看到的数据库图表来看,很可能他们都会遇到同样的问题。数据库作者不是我的,这只会让人们在查看图表时感到困惑。

SQL 创建脚本:

CREATE SCHEMA IF NOT EXISTS `sampleBD` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `sampleBD` ;

-- -----------------------------------------------------
-- Table `sampleBD`.`People`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `sampleBD`.`People` (
`PeopleID` INT NOT NULL AUTO_INCREMENT ,
`Name` VARCHAR(200) NOT NULL ,
`EntryDate` DATETIME NULL ,
`EntryBy` INT NULL ,
PRIMARY KEY (`PeopleID`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `sampleBD`.`PeopleNumberId`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `sampleBD`.`PeopleNumberId` (
`PeopleNumberIdID` INT NOT NULL AUTO_INCREMENT ,
`PeopleID` INT NOT NULL ,
`NumberId` INT(11) NOT NULL ,
`EntryDate` DATETIME NULL ,
`EntryBy` INT NULL ,
PRIMARY KEY (`PeopleNumberIdID`) ,
INDEX `PeopleID` (`PeopleID` ASC) ,
INDEX `EntryBy` (`EntryBy` ASC) ,
CONSTRAINT `PeopleID`
FOREIGN KEY (`PeopleID` )
REFERENCES `sampleBD`.`People` (`PeopleID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `EntryBy`
FOREIGN KEY (`EntryBy` )
REFERENCES `sampleBD`.`People` (`PeopleID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `sampleBD`.`PeopleCbi`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `sampleBD`.`PeopleCbi` (
`PeopleCbiID` INT NOT NULL AUTO_INCREMENT ,
`PeopleID` INT NOT NULL ,
`Cbi` INT NOT NULL ,
`EntryDate` DATETIME NULL ,
`EntryBy` INT NULL ,
PRIMARY KEY (`PeopleCbiID`) ,
INDEX `PessoaID` (`PeopleID` ASC) ,
INDEX `EntryBy` (`EntryBy` ASC) ,
CONSTRAINT `PessoaID`
FOREIGN KEY (`PeopleID` )
REFERENCES `sampleBD`.`People` (`PeopleID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `EntryBy`
FOREIGN KEY (`EntryBy` )
REFERENCES `sampleBD`.`People` (`PeopleID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

该脚本能够创建第一个和第二个表,但是当它到达第三个表时,它会返回错误代码。

Error Code: 1005. Can't create table 'samplebd.peoplecbi' (errno: 121)

这是一个外键问题,但我不确定如何在不改变所涉及的表的当前结构的情况下修复它。

感谢您的帮助。

最佳答案

这看起来像是外键约束名称之间的名称冲突。约束名称在数据库中必须是唯一的,就像表名称一样。

因此,只需为第三个表中的约束 EntryBy 选择另一个名称即可。它不会影响您拥有的任何功能。

关于mysql - 每个表两个四个外键不能引用主表中的单个主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10145597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com