2016-04-11 2 views
0

Я пытаюсь установить значение NULL в столбце deserved_slope_2, когда пользователь редактирует значение в форме. К сожалению, этот столбец является внешним ключом, который ссылается на первичный ключ (индекс автоматического инкремента) столбца другой таблицы.Mysql Set Значение NULL в столбце внешнего ключа

При выполнении запроса я получаю:

Error Number: 1452 

Cannot add or update a child row: a foreign key constraint fails (`game_skisimulation`.`game_created_lifts`, CONSTRAINT `fk_game_created_lifts_game_created_slopes2` FOREIGN KEY (`deserved_slope_2`) REFERENCES `game_created_slopes` (`id_created_slopes`) ON DE) 

UPDATE game_created_lifts SET deserved_slope_2 = '0' WHERE id_created_lifts = '200' LIMIT 1 

Я читал, что это происходит потому, что NULL ID не существует в упомянутой таблице. К сожалению, кажется, что я не могу установить NULL в этой колонке:

Столбец первичного ключа не может содержать значения NULL.

Как я могу решить эту проблему? Я хочу установить NULL в столбце deserved_slope_2 (для его сброса).

- Структура таблицы для таблицы game_created_lifts

CREATE TABLE `game_created_lifts` (
    `id_created_lifts` int(11) NOT NULL, 
    `id_player` int(11) NOT NULL, 
    `deserved_slope_1` int(11) DEFAULT NULL, 
    `deserved_slope_2` int(11) DEFAULT NULL 

) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

-- 
-- RELATIONS FOR TABLE `game_created_lifts`: 
-- `deserved_slope_1` 
--  `game_created_slopes` -> `id_created_slopes` 
-- `deserved_slope_2` 
--  `game_created_slopes` -> `id_created_slopes` 

- Структура таблицы для таблицы game_created_slopes

CREATE TABLE `game_created_slopes` (
    `id_created_slopes` int(11) NOT NULL, 
    `id_player` int(11) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
+0

Первичный ключ не может содержать 'NULL', но внешний ключ может. Вам просто нужно объявить столбец 'deserved_slope_1'' NULL' в 'CREATE TABLE'. – Barmar

+0

Если это обновление в первом блоке является тем, которое вы пытаетесь выполнить 'deserved_slope_2 = '0'', не является попыткой установить поле в' NULL'; это попытка установить его на '0', что не то же самое. – Uueerdo

ответ

0

Установка значения для NULL в столбец, который имеет ограничение внешнего ключа, которая зависит от уникальный и не нулевой столбцы должны быть довольно прямолинейными

UPDATE game_created_lifts SET deserved_slope_2 = NULL WHERE id_created_lifts = '200' LIMIT 1; 

Перейдите на страницу SQL Fiddle, чтобы увидеть его онлайн.

Тестовые данные:

create table a (a int primary key); 
create table b (a int references a(a)); 

insert into a(a) values (1); 
insert into b(a) values (1); 

update b set a = null; 

Запрос:

select * from b 

Результат:

(null) 
Смежные вопросы