MYSQL外键约束的学习笔记
发布:smiling 来源: PHP粉丝网 添加日期:2015-04-16 15:54:54 浏览: 评论:0
MySQL有两种常用的引擎类型:MyISAM和InnoDB,目前只有InnoDB引擎类型支持外键约束了,所以我们如果要做外键约束就必须是InnoDB引擎了.
在项目中,很多时候我们建数据表单的时候,两个表示相关联的,并且一个表里面的数据是完全依赖另一张表的数据的.
外键约束语法:
- [CONSTRAINT [symbol]] FOREIGN KEY
- [index_name] (index_col_name, ...)
- REFERENCES tbl_name (index_col_name,...)
- [ON DELETE reference_option] --phpfensi.com
- [ON UPDATE reference_option]
- reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION 外键的使用需要满足下列的条件:
1.两张表必须都是InnoDB表,并且它们没有临时表。
2.建立外键关系的对应列必须具有相似的InnoDB内部数据类型。
3.建立外键关系的对应列必须建立了索引。
4.假如显式的给出了CONSTRAINT symbol,那symbol在数据库中必须是唯一的,假如没有显式的给出,InnoDB会自动的创建.
例如:表1:rou_products 表2:rou_pro_images;
ru_products(id,….)是商品信息表,ru_pro_images(id,pro_id,…)是商品相册表;ru_products与ru_pro_images是1:N关系;
现在的要求是,当删除一个商品时,该商品的所有相册数据全部删掉,有两种方式:
方式一:在代码中实现,删除delete from ru_products … 之前先select 该条数据的id,然后根据这个id,删除ru_images表中.pro_id = id 的数据;
方式二:在 create table ru_images的时候,建立外键约束,这样,在删除表ru_products的时候,数据库会自动帮我们把ru_images中与ru_products表中删除的对应数据删除掉,这样,不仅节省代码、减少工作量,更能保障数据一致性.
建议外键约束具体的操作方式是:
1、建立pro_id字段的索引:ALTER TABLE ru_images ADD INDEX(pro_id);//如果pro_id已经添加索引,请忽略此步骤;
2、建议外键约束:ALTER TABLE
ru_images ADD CONSTRAINT fk_pro_img FROEIGN KEY(pro_id) REFERENCES ru_products (id) ON DELETE CASCADE;
其中 ON DELETE CASCADE 表示当删除ru_products的时候,级联对ru_images进行删除;当然,这里还有其他选项可选择:
[ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
CASCADE 表示级联操作;SET NULL 表示置空;NO ACTION 表示不进行任何操作;RESTRICT 表示当ru_products中的某个商品,有相册数据的时候,不允许删除该商品;
其中,在添加外键约束的时候,有几点要注意:
一、添加外键的字段必须先建立索引;
二、当数据表中有数据的时候,可能导致添加外键约束失败.
Tags: MYSQL外键约束 MYSQL约束
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)