温习下Mysql外键 Foreign Key的 Cascade 和 Restrict
2014-12-04 00:00
375 查看
摘要: 温习下Mysql的外键 Foreign Key Cascade 和 Restrict
外键约束:
一. InnoDB引擎类型
二. 两个表的列必须是数据类型相似
三. 外键的定义语法
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
该语法可以在 CREATE TABLE 和 ALTER TABLE 时使用,如果不指定CONSTRAINT symbol,MYSQL会自动生成一个名字。
ON DELETE、ON UPDATE表示事件触发限制,可设参数:
RESTRICT(限制外表中的外键改动)
CASCADE(跟随外键改动)
SET NULL(设空值)
SET DEFAULT(设默认值)
NO ACTION(无动作,默认的)
注:
Cascade方式
在父表上update/delete记录时,同步update/delete掉子表的匹配记录
On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用
Restrict方式
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
四. 举例
给产品表和产品属性表添加数据
在Restrict方式 下删除产品
在Restrict方式 下添加产品属性
这个就是触发器在Restrict方式下限制动作
在看看Cascade方式
修改产品属性表结构
然后删除产品
在看看产品属性表是否还有产品id=2 的属性,已经没有了
这就是Cascade方式下的同步改动。
外键约束:
一. InnoDB引擎类型
二. 两个表的列必须是数据类型相似
三. 外键的定义语法
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
该语法可以在 CREATE TABLE 和 ALTER TABLE 时使用,如果不指定CONSTRAINT symbol,MYSQL会自动生成一个名字。
ON DELETE、ON UPDATE表示事件触发限制,可设参数:
RESTRICT(限制外表中的外键改动)
CASCADE(跟随外键改动)
SET NULL(设空值)
SET DEFAULT(设默认值)
NO ACTION(无动作,默认的)
注:
Cascade方式
在父表上update/delete记录时,同步update/delete掉子表的匹配记录
On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用
Restrict方式
如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
四. 举例
CREATE TABLE `product` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='产品表';
CREATE TABLE `product_attr` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pid` int(11) DEFAULT NULL, `name` varchar(32) DEFAULT '', PRIMARY KEY (`id`), KEY `pid` (`pid`) USING BTREE, CONSTRAINT `product_attr_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `product` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='产品属性表';
给产品表和产品属性表添加数据
INSERT INTO `product` (`name`) VALUES ('电视')
INSERT INTO `product_attr` (`pid`, `name`) VALUES ('2', '32寸')
在Restrict方式 下删除产品
DELETE FROM `product` WHERE (`id`='2')
提示1451 - Cannot delete or update a parent row: a foreign key constraint fails (`test`.`product_attr`, CONSTRAINT `product_attr_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `product` (`id`))
在Restrict方式 下添加产品属性
INSERT INTO `product_attr` (`pid`, `name`) VALUES ('3', 'LED')
提示1452 - Cannot add or update a child row: a foreign key constraint fails (`test`.`product_attr`, CONSTRAINT `product_attr_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `product` (`id`))
这个就是触发器在Restrict方式下限制动作
在看看Cascade方式
修改产品属性表结构
ALTER TABLE `product_attr` DROP FOREIGN KEY `product_attr_ibfk_1`;
ALTER TABLE `product_attr` ADD CONSTRAINT `product_attr_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
然后删除产品
DELETE FROM `product` WHERE (`id`='2')
在看看产品属性表是否还有产品id=2 的属性,已经没有了
这就是Cascade方式下的同步改动。
相关文章推荐
- MySql 外键约束 FOREIGN KEY REFERENCES 之 空、RESTRICT、NO ACTION、CASCADE、SET NULL 等类型分析和作用解读
- MySql 外键约束 之CASCADE、SET NULL、RESTRICT、空等类型分析和作用解读
- MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
- Mysql中外键的 Cascade ,NO ACTION ,Restrict ,SET NULL
- MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用
- MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
- MySQL的外键约束:Cascade/Restrict/No action/SET NULL :级联操作
- MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
- MySQL外键设置中的 Cascade、NO ACTION、Restrict、SET NULL
- MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用
- MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用
- MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
- MySql 外键约束 之CASCADE、SET NULL、RESTRICT、空等类型分析和作用解读
- MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
- MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
- MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
- Mysql的外键约束(CASCADE,RESTRICT,NO ACTION)
- Mysql中 主键、外键 的 Cascade ,NO ACTION ,Restrict ,SET NULL
- MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
- Mysql外键设置中的CASCADE、NO ACTION、RESTRICT、SET NULL