我试图更新程序中的一行。 但我一直在说:
MySQLIntegrityConstraintViolationException
根据MySQL workbench对应于1452错误。 我知道这意味着外键约束不起作用,但无法弄清楚如何修复它。
UPDATE poker_event
SET prize ='0.00', event_name = 'testdinges', min_players = '4', max_players ='500', loc_name = 'NULL'
WHERE date_time = '2017-01-26 00:00:00.0';
当loc_name设置为NULL时发生错误。 这只发生在我删除程序中的位置时,然后尝试更新poker_event中的行。
关于我的数据库,这是MySQl在使用逆向工程选项时给我的。 (仅限相关部分)
CREATE TABLE IF NOT EXISTS `fullhousegr1`.`location` (
`loc_name` VARCHAR(255) NOT NULL,
`house_number` INT(11) NOT NULL,
`postal_code` VARCHAR(7) NOT NULL,
`capacity` INT(11) NOT NULL,
`place` VARCHAR(40) NOT NULL,
`street` VARCHAR(40) NOT NULL,
PRIMARY KEY (`loc_name`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
CREATE TABLE IF NOT EXISTS `fullhousegr1`.`poker_event` (
`event_name` VARCHAR(45) NOT NULL,
`date_time` DATETIME NOT NULL,
`min_players` INT(11) NOT NULL,
`max_players` INT(11) NOT NULL,
`prize` DECIMAL(10, 2) NOT NULL,
`loc_name` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`date_time`),
INDEX `loc_name` (`loc_name` ASC),
CONSTRAINT `poker_event_ibfk_1`
FOREIGN KEY (`loc_name`)
REFERENCES `fullhousegr1`.`location` (`loc_name`)
ON DELETE SET NULL
ON UPDATE SET NULL)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
那么,我需要在数据库中更改哪些内容才能更新poker_event中没有位置的行?
提前完成!
答案 0 :(得分:0)
外键需要父表中存在的值。 NULL
不是一个值,这意味着我们还不知道价值。不要将您的外键设为NULL
。最好将它添加到需要将其添加到父表的0
。
答案 1 :(得分:0)
你输入了FOREIGN KEY(loc_name
)但同时loc_name = NULL所以它给出错误。