MySQL工作台-自引用表和自定义脚本
我使用MySQL 5.3.28创建数据库。其中一张桌子是指它自己,这是一个很大的痛苦。以下是最初创建的代码:MySQL工作台-自引用表和自定义脚本,mysql,mysql-workbench,Mysql,Mysql Workbench,我使用MySQL 5.3.28创建数据库。其中一张桌子是指它自己,这是一个很大的痛苦。以下是最初创建的代码: CREATE TABLE IF NOT EXISTS `dhbpsychiatry`.`activity` ( `ActivityId` INT(11) NOT NULL AUTO_INCREMENT , `NeedsRepeating` BINARY(1) NULL DEFAULT NULL , `Prerequisition` INT(11) NOT NULL DEFAULT 0
CREATE TABLE IF NOT EXISTS `dhbpsychiatry`.`activity` (
`ActivityId` INT(11) NOT NULL AUTO_INCREMENT ,
`NeedsRepeating` BINARY(1) NULL DEFAULT NULL ,
`Prerequisition` INT(11) NOT NULL DEFAULT 0 ,
`ActivityName` VARCHAR(45) NOT NULL ,
`ActivityDescription` VARCHAR(45) NULL ,
PRIMARY KEY (`ActivityId`) ,
INDEX `Prerequisition` (`ActivityId` ASC) ,
CONSTRAINT `Prerequisition`
FOREIGN KEY (`ActivityId` )
REFERENCES `dhbpsychiatry`.`activity` (`ActivityId` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
当然,问题在于创建第一行
INSERT INTO `dhbpsychiatry`.`activity` (`ActivityId`, `Prerequisition`,
`ActivityName`) VALUES (1, 1, 'No prerequisition');
返回
ERROR 1452: Cannot add or update a child row: a foreign key constraint fails
如果我试着更简单一点也一样
INSERT INTO `dhbpsychiatry`.`activity` (`ActivityName`)
VALUES ('No prerequisition');
我想我已经尝试了所有的可能性,使FK可以为null,而不是null,无论有没有默认值 经过一番挖掘,我发现了一些有效的方法:
SET FOREIGN_KEY_CHECKS = 0;
Insert into activity (ActivityID, ActivityName) VALUES (0,'No prerequisition');
SET FOREIGN_KEY_CHECKS = 1;
所以我在workbench中用这些行创建了一个新的SQL脚本
所以我这里有两个问题:
2我如何自动添加此脚本,以便在我对数据库进行正向工程时执行?您的索引和外键定义混淆了。主要问题是列
ActivityId
正在引用自身
试试这个:
CREATE TABLE IF NOT EXISTS `dhbpsychiatry`.`activity` (
`ActivityId` INT(11) NOT NULL AUTO_INCREMENT ,
`NeedsRepeating` BINARY(1) NULL DEFAULT NULL ,
`Prerequisition` INT(11) NOT NULL DEFAULT 0 ,
`ActivityName` VARCHAR(45) NOT NULL ,
`ActivityDescription` VARCHAR(45) NULL ,
PRIMARY KEY (`ActivityId`) ,
INDEX `Prerequisition_idx` (`Prerequisition`) , --- changed the index name
--- and the indexed column
CONSTRAINT `Prerequisition_fk` --- changed the constraint name
FOREIGN KEY (`Prerequisition` ) --- main issue !! changed
--- the referencing column
REFERENCES `dhbpsychiatry`.`activity` (`ActivityId`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
)
“我想我已经尝试了所有的可能性,使FK可以为null,而不是null,有或没有默认值……”听起来你只是在随机地尝试一些事情,没有逻辑地思考这个问题!经过几个小时的寻找解决方案,你开始怀疑是你的字体大小的错误,lol;)但说真的,更改“null”和“default value”看起来是朝着正确方向迈出的一步。不管怎么说,一切都解决了。Thx,它似乎起作用了!虽然我无法在不更改SQL语句的情况下更改索引的名称(这是我试图避免的),但我所要做的就是更改外键的引用。我怎么会错过呢?@Kris:你也可以在Workbench中更改索引和约束名称。是的,你可以,但在运行正向工程后,它们会返回默认名称。无论如何,这是没有必要的。