我已经让它在 MySQL 5.0 中工作。方法如下:
做一些设置——创建一个数据库和一个用户;授予用户权限:
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;
更好?