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)
相关文章推荐
- MySql 一些备忘
- mysql load操作
- mysql中my.cnf的一个配置文件
- mysql 导入导出数据库、数据表的方法
- Mysql 慢查询日志
- mysql 常用命令,连接数据库,查看建表语句,批量导入数据,批量更新数据,连接查询
- MySQL定时器EVENT学习笔记
- 利用mysql事务特性实现并发安全的自增ID示例
- win7 下成功安装 RMySQL
- 安装MySQL在最后的start service停住了解决方法
- mysql优化案例分析
- MySQL备份与恢复之保证数据一致性
- MySQL数据库中的Date,DateTime,TimeStamp和Time类型
- mysql日期格式化
- mysql慢查询记录
- Mysql的索引--B树
- Mysql windows环境下无法进行…
- Mysql 触发器
- mysql数据库的DDL,DML, DCL, TCL
- Mysql启动失败报错1067