2015-02-02 4 views
0

Я пытаюсь обновить строку в своей программе. Но я получаю:Ошибка 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, который не имеет место?

thanx заранее!

ответ

0

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

+0

не ссылается на не существующую таблицу и поэтому не разрешается? – blipman17

+0

нашел его, не может установить его в «NULL», но должен установить его в NULL – blipman17

+0

, это совсем другое. Это называется однонаправленным отношением. –

0

Вы помещаете FOREIGN KEY (loc_name), но в то же время loc_name = NULL, поэтому его даете ошибку.

Смежные вопросы