我的数据库上出现SQL 1452错误

时间:2015-02-02 11:03:19

标签: mysql sql mysql-error-1452

我试图更新程序中的一行。 但我一直在说:

  

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中没有位置的行?

提前完成!

2 个答案:

答案 0 :(得分:0)

外键需要父表中存在的值。 NULL不是一个值,这意味着我们还不知道价值。不要将您的外键设为NULL。最好将它添加到需要将其添加到父表的0

答案 1 :(得分:0)

你输入了FOREIGN KEY(loc_name)但同时loc_name = NULL所以它给出错误。