【问题标题】:SQL 1452 error on my database我的数据库上出现 SQL 1452 错误
【发布时间】:2015-04-01 07:32:43
【问题描述】:

我正在尝试更新程序中的一行。 但我不断得到:

MySQLIntegrityConstraintViolationException

根据 MySQL 工作台对应于 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 中没有位置的行?

提前感谢!

【问题讨论】:

    标签: mysql sql mysql-error-1452


    【解决方案1】:

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

    【讨论】:

    • 不会引用不存在的表,因此不允许吗?
    • 找到了,不能设为'NULL',但必须设为NULL
    • 不一样。这称为单向关系。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-18
      • 2013-02-06
      • 2012-06-20
      • 2020-09-25
      • 2012-05-10
      • 1970-01-01
      • 2017-01-03
      • 2019-11-05
      相关资源
      最近更新 更多