[mysql删除外键约束]MYSQL外键约束的学习笔记

更新时间:2019-10-16    来源:mysql教程    手机版     字体:

【www.bbyears.com--mysql教程】


在项目中,很多时候我们建数据表单的时候,两个表示相关联的,并且一个表里面的数据是完全依赖另一张表的数据的,

外键约束语法


[CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [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中的某个商品,有相册数据的时候,不允许删除该商品;

其中,在添加外键约束的时候,有几点要注意:

一、添加外键的字段必须先建立索引;
二、当数据表中有数据的时候,可能导致添加外键约束失败

本文来源:http://www.bbyears.com/shujuku/73535.html

热门标签

更多>>

本类排行