2013-09-17 2 views
0

вот мой стол ....Как использовать каскад? Шахта не работает

create table c1(id int primary key,name varchar(20)); 
create table c2(iid int primary key,ename varchar(20),foreign key(iid) references  c1(id) on update cascade on delete cascade); 

insert into c1 values(1,'a'); 
insert into c1 values(2,'b'); 

insert into c2 values(1,'a') 
insert into c2 values(2,'b') 

update c1 set id=3 where id=1; 
update c1 set name='hello' where id=2; 

, когда я что-то обновления ничего не происходит ..

Что на самом деле каскад, это на самом деле обновления значения c2 в таблицах ID при обновлении на c1 ..

, что я на самом деле думаю, что выше обновление запрос должен изменить значение значение идентификатора c2, где ID = 1 ...

если я ошибаюсь .. пожалуйста скажите мне, как обновить значения в c2, когда я обновляю c1 ... Спасибо ...

ответ

2

В MySQL это поддерживается, если движок хранения InnoDB. Другие механизмы хранения, такие как MyISAM, не применяют ограничение (хотя MySQL допускает синтаксис «ссылки», но он не имеет никакого эффекта: http://dev.mysql.com/doc/refman/5.7/en/example-foreign-keys.html).

Проверьте двигатель для хранения, например, таблица c1:

SHOW CREATE TABLE c1 

Проверьте, какой механизм хранения используется по умолчанию:

SHOW VARIABLES LIKE 'storage_engine' 

Убедитесь, что внешний ключ проверки фактически исполнено:

SHOW VARIABLES LIKE 'foreign_key_checks' 

Если двигатель хранения не является InnoDB, вы можете конвертировать ваши таблицы MyISAM в InnoDB, или (так как это пример игрушки), вы можете просто воссоздать таблицы. Если вы воссоздаете таблицы, вы можете указать механизм хранения в конце вашей команды CREATE TABLE, или вы можете установить ее перед созданием таблиц, например.

SET storage_engine=MYISAM; 

Аналогично, если переменная foreign_key_checks выключен, вы можете включить его таким образом:

SET foreign_key_checks=1; 
+0

Hai марко спасибо .. Как я не репутацию я не могу бухает вас до ... –

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