北京SEO

MYSQL外键约束的学习笔记

2019/10/10/17:32:42  阅读:1678  来源:谷歌SEO算法  标签: Linus Torvalds

MySQL有两种常用的引擎类型:MyISAM和InnoDB,目前只有InnoDB引擎类型支持外键约束了,所以我们如果要做外键约束就必须是InnoDB引擎了.

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

外键约束语法:

  1. [CONSTRAINT[symbol]]FOREIGNKEY
  2. [index_name](index_col_name,...)
  3. REFERENCEStbl_name(index_col_name,...)
  4. [ONDELETEreference_option]--phpfensi.com
  5. [ONUPDATEreference_option]
  6. 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中的某个商品,有相册数据的时候,不允许删除该商品;

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

一、添加外键的字段必须先建立索引;

二、当数据表中有数据的时候,可能导致添加外键约束失败.

广告内容

MYSQL外键约束的学习笔记 MYSQL外键约束的学习笔记 MYSQL外键约束的学习笔记

相关阅读

热门评论

爱互踩 爱互踩

爱互踩流量交换~

总篇数175

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法