Я заставил это работать в MySQL 5.0.Вот как:
Выполните некоторые настройки - создайте базу данных и пользователя;Разрешения пользователя GRANT:
mysql -h localhost -u root -p
create database foreign_demo;
create user foreign_demo identified by 'foreign_demo';
grant all on foreign_demo.* to 'foreign_demo'@'%';
grant all on foreign_demo.* to 'foreign_demo'@'localhost';
Теперь создайте две простые таблицы: t1 (родительская) и t2 (дочерняя):
CREATE TABLE IF NOT EXISTS t1
(
t1_id integer not null auto_increment,
primary key(t1_id)
);
CREATE TABLE IF NOT EXISTS t2
(
t2_id integer not null auto_increment,
t1_id integer,
primary key(t1_id),
constraint fk_t1 foreign key(t2_id) references t1(t1_id) on delete cascade on update cascade
);
Теперь давайте вставим строку в каждую:
INSERT INTO t1 values();
INSERT INTO t2(t1_id) SELECT last_insert_id();
Давайте выберем то, что только что вставили:
select * from t1;
select * from t2;
Вы должны увидеть одну строку в каждой таблице;таблица t2
будет ссылаться на t1
.
Теперь удалите родительскую запись:
delete from t1 where t1_id = 1;
Когда вы выполните эти выборки, вы не найдете строк ни в одной из таблиц, поскольку удалениеродительский каскад удаляется в дочерней таблице:
select * from t1;
select * from t2;
Лучше?