2014-01-06 8 views
0

Как установить внешний ключ в таблице2 как NULL, когда первичный ключ в таблице1 удален? Я создал 2 стола Item и order_item.Как установить значение внешнего ключа как «NULL»?

Item(item_no(primary key),qty); 
order_item(item_no(foreign key),order_no); 

Я создал таблицу order_item:

create table order_item( 
item_no int references item on delete set NULL, 
    order_no int); 

Тогда я вставленные 5 значений в Item таблице. Теперь, если я удалю item_no = 4 в таблице элементов, его получение будет удалено в таблице Item, но значение item_no не установлено на NULL в таблице order_item.

ответ

1

Пожалуйста, используйте ниже синтаксис, используя явное CONSTRAINT [name] FOREIGN KEY ... положение:

CREATE TABLE order_item1(
    item_no int, 
    order_no int, 
    constraint foreign key (item_no) references item(item_no) on delete set NULL 
); 

или добавить явно в foreigng ключ к существующей таблице:

ALTER TABLE order_item1 
ADD constraint foreign key (item_no) references item(item_no) on delete set NULL ; 

Пожалуйста, обратите внимание на этот простой тест: http://www.sqlfiddle.com/#!2/3dddf/1
Предложение встроенных ссылок не работает.

Причина этого странного behavoiur описана в документации, пожалуйста, проверьте эту ссылку:
http://dev.mysql.com/doc/refman/5.7/en/create-table.html

MySQL не признает и не поддерживает «встроенные ЛИТЕРАТУРЫ спецификации» (как определено в стандарте SQL) где ссылки определяются как часть спецификации столбца. MySQL принимает предложения REFERENCES только в том случае, если они указаны как часть отдельной спецификации FOREIGN KEY.


Инлайн (инлайн = рядом определения столбца) ссылки specyfications разбираются MySql, но MySql просто игнорирует их.

+0

Почему вы использовали другой стол? – user2713461

+0

Я использовал две таблицы 'order_item' и' order_item1' в демонстрации, чтобы показать, используя только один тестовый пример, как они отличаются (что будет результатом после запуска 'delete'). Если бы я использовал одно и то же имя таблицы, для этого потребовалось два тестовых примера. – krokodilko

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