您的位置:首页 > 数据库 > MySQL

mysql 中外键处理的三种方式

2013-11-27 09:59 302 查看
-- 创建测试主表. ID 是主键.
CREATE TABLE test_main (
id      INT,
value   VARCHAR(10),
PRIMARY KEY(id)
) type=innodb;
-- 创建测试子表.
CREATE TABLE test_sub (
id      INT,
main_id INT,
value   VARCHAR(10),
PRIMARY KEY(id)
) type=innodb;
-- 插入测试主表数据.
INSERT INTO test_main(id, value) VALUES (1, 'ONE');
INSERT INTO test_main(id, value) VALUES (2, 'TWO');

-- 插入测试子表数据.
INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'ONEONE');
INSERT INTO test_sub(id, main_id, value) VALUES (2, 2, 'TWOTWO');
创建外键(使用 ON DELETE CASCADE 选项,删除主表的时候,同时删除子表)
ALTER TABLE test_sub ADD CONSTRAINT main_id_cons  FOREIGN KEY (main_id)  REFERENCES  test_main(id)  ON DELETE CASCADE;
执行 delete from test_sub where id=1; ,主表删除。子表相关的也删除 (子表的某一个键是从主表那引用过来的);
创建外键(使用 ON delete set null 选项,删除主表的时候,子表相关的设置为空)
ALTER TABLE test_sub ADD CONSTRAINT main_id_cons  FOREIGN KEY (main_id)  REFERENCES  test_main(id)  ON  delete set null;
执行 delete from test_sub where id=1; ,主表删除。子表相关的设置为空;

创建外键(使用 ON delete restrict或者 no action  选项,如果只删除主表的时候,此时是不允许删除的)
ALTER TABLE test_sub ADD CONSTRAINT main_id_cons  FOREIGN KEY (main_id)  REFERENCES  test_main(id)  ON  delete restrict;

下面是错误提示:
mysql> delete from test_main where id=1;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test`.`test_sub`, CONSTRAINT `main_id_cons` FOREIGN KEY (`main_id`)
REFERENCES `test_main` (`id`) ON DELETE NO ACTION)


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: