所以我对MySQL很非常新但是我想我到目前为止已经掌握了相当多的东西。我正在努力创建表pageAction.show()
。在我自己的研究之后,我几乎是肯定的,它与表中的键有关。但我不明白问题在哪里或如何解决。
下面的SQL查询会为项目创建所有表。我不确定这个问题,因为我现在只收到项目的错误代码。任何有关导致此问题以及如何在代码中纠正此问题的见解和建议将不胜感激。
PROJECT
答案 0 :(得分:0)
通常在无法创建外键时会出现错误1005。在创建外键约束时,父表应该在数据库中可用。
在您的情况下,'employee'表中有一个FK到'department'表,但您在创建'department'表之前尝试创建'employee'表。 “部门”表也有一个FK回到“员工”表。因此,您无法首先创建“部门”表。要解决此问题,您可以先创建“部门”表,而不要将FK创建为“员工”表。然后创建'employee'表,然后用FK更改'department'表。
以下是前两个表的修改代码,如果出现相同的错误,请按照相同的模式进行休息。
CREATE TABLE IF NOT EXISTS `ebrasi1db`.`department` (
`dnumber` INT(11) NOT NULL,
`dname` VARCHAR(45) NULL DEFAULT NULL,
`mgrssn` VARCHAR(10) NULL DEFAULT NULL,
`mgrstartdate` DATE NULL DEFAULT NULL,
PRIMARY KEY (`dnumber`),
INDEX `mgrssn_idx` (`mgrssn` ASC))
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `ebrasi1db`.`employee` (
`ssn` VARCHAR(10) NOT NULL,
`fname` VARCHAR(45) NULL DEFAULT NULL,
`minit` VARCHAR(1) NULL DEFAULT NULL,
`lname` VARCHAR(45) NULL DEFAULT NULL,
`bdate` DATE NULL DEFAULT NULL,
`address` VARCHAR(45) NULL DEFAULT NULL,
`sex` VARCHAR(1) NULL DEFAULT NULL,
`salary` INT(11) NULL DEFAULT NULL,
`superssn` VARCHAR(10) NULL DEFAULT NULL,
`dno` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`ssn`),
INDEX `superssn_idx` (`superssn` ASC),
INDEX `dno_idx` (`dno` ASC),
CONSTRAINT `superssn`
FOREIGN KEY (`superssn`)
REFERENCES `ebrasi1db`.`employee` (`ssn`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `dno`
FOREIGN KEY (`dno`)
REFERENCES `ebrasi1db`.`department` (`dnumber`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
alter table department add
CONSTRAINT `mgrssn`
FOREIGN KEY (`mgrssn`)
REFERENCES `ebrasi1db`.`employee` (`ssn`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
答案 1 :(得分:0)
您的问题主要在于您尝试为非键列创建约束(因为引用的表具有双键)。
在您的表project
中,您有:
CONSTRAINT `plocation`
FOREIGN KEY (`plocation`)
REFERENCES `dept_locations` (`dlocation`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
dept_locations.dlocation
不是关键字ALONE(主键),因此您无法创建该约束。
您需要对引用的表中的两个键进行约束,如下所示:
CONSTRAINT `plocation`
FOREIGN KEY (`pnumber`, `plocation`)
REFERENCES `dept_locations` (`dnumber`, `dlocation`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
在这种情况下,您不需要第一个约束dnum
,因为它已在dept_locations
表中引用。
另请注意,您的表department
和employee
将不会被创建,因为一个引用另一个,因此您需要先创建表而不使用约束,然后应用以下约束:
ALTER TABLE `employee` add
CONSTRAINT `dno`
FOREIGN KEY (`dno`)
REFERENCES `department` (`dnumber`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
department
表及其对employee