Ошибка SQL 1452 в моей базе данных

Я пытаюсь обновить строку в моей программе. Но я продолжаю получать:

MySQLIntegrityConstraintViolationException

что соответствует ошибке 1452 в соответствии с MySQL Workbench. Я знаю, что это означает, что ограничение внешнего ключа не работает, но не могу понять, как это исправить.

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 ответа

Решение

Для внешнего ключа требуется значение, которое существует в родительской таблице. NULL это не значение, это означает, что мы еще не знаем значение. Не делайте свой внешний ключ как NULL, Лучше сделать это, чтобы 0 который вам нужно добавить его в родительскую таблицу.

Вы ставите иностранный ключ (loc_name) но в то же время loc_name = NULL, так что это дает ошибку.

Другие вопросы по тегам