MySql中的外键约束
2015-12-27 15:05
796 查看
外键约束对子表的含义: 如果在父表中找不到候选键,则不允许在子表上进行insert/update
外键约束对父表的含义: 在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的on update/on delete子句
InnoDB支持5种方式, 分列如下
1、 cascade方式 在父表上update/delete记录时,同步update/delete掉子表的匹配记录 On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用
2、set null方式 在父表上update/delete记录时,将子表上匹配记录的列设为null 要注意子表的外键列不能为not null On delete set null从mysql3.23.50开始可用; on update
set null从mysql4.0.8开始可用
3、No action方式 如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作 这个是ANSI SQL-92标准,从mysql4.0.8开始支持
4、Restrict方式 同no action, 都是立即检查外键约束 . Set default方式 解析器认识这个action,但Innodb不能识别,不知道是什么意思... 注意:trigger不会受外键cascade行为的影响,即不会解发trigger
举例:
CREATE TABLE `t_carportgroup` (
`id` varchar(32) NOT NULL,
`name` varchar(45) DEFAULT NULL COMMENT ,
`parking_lot_id` varchar(32) DEFAULT NULL COMMENT ,
`version` int(11) DEFAULT NULL COMMENT ,
`code` varchar(4) DEFAULT NULL COMMENT ,
`carport_count` int(11) DEFAULT NULL,
`status` int(50) DEFAULT NULL,
`SN` varchar(50) DEFAULT NULL,
`batch_no` int(11) DEFAULT NULL,
`operator_id` varchar(32) DEFAULT NULL,
`assigned` int(11) DEFAULT NULL,
`exception_message` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_group_parkinglotid` (`parking_lot_id`) USING BTREE,
CONSTRAINT `t_carportgroup_ibfk_1` FOREIGN KEY (`parking_lot_id`) REFERENCES `t_parking_lot` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='车位组表; InnoDB free: 9216 kB; (`parking_lot_id`) REFER';
外键约束对父表的含义: 在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的on update/on delete子句
InnoDB支持5种方式, 分列如下
1、 cascade方式 在父表上update/delete记录时,同步update/delete掉子表的匹配记录 On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用
2、set null方式 在父表上update/delete记录时,将子表上匹配记录的列设为null 要注意子表的外键列不能为not null On delete set null从mysql3.23.50开始可用; on update
set null从mysql4.0.8开始可用
3、No action方式 如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作 这个是ANSI SQL-92标准,从mysql4.0.8开始支持
4、Restrict方式 同no action, 都是立即检查外键约束 . Set default方式 解析器认识这个action,但Innodb不能识别,不知道是什么意思... 注意:trigger不会受外键cascade行为的影响,即不会解发trigger
举例:
CREATE TABLE `t_carportgroup` (
`id` varchar(32) NOT NULL,
`name` varchar(45) DEFAULT NULL COMMENT ,
`parking_lot_id` varchar(32) DEFAULT NULL COMMENT ,
`version` int(11) DEFAULT NULL COMMENT ,
`code` varchar(4) DEFAULT NULL COMMENT ,
`carport_count` int(11) DEFAULT NULL,
`status` int(50) DEFAULT NULL,
`SN` varchar(50) DEFAULT NULL,
`batch_no` int(11) DEFAULT NULL,
`operator_id` varchar(32) DEFAULT NULL,
`assigned` int(11) DEFAULT NULL,
`exception_message` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_group_parkinglotid` (`parking_lot_id`) USING BTREE,
CONSTRAINT `t_carportgroup_ibfk_1` FOREIGN KEY (`parking_lot_id`) REFERENCES `t_parking_lot` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='车位组表; InnoDB free: 9216 kB; (`parking_lot_id`) REFER';
相关文章推荐
- MYSQL查看和增加用户权限
- MySQL外键设置中的的 Cascade、NO ACTION、Restrict、SET NULL
- mysql jdbc驱动源码分析(获取链接 connection)
- mysql数据库下载和创建
- C#程序调用cmd执行命令-MySql备份还原
- ERROR 1813 -Mysql:Tablespace for table 'xxx`.'xxx` exists.
- mysql系列一
- 自己用的一个mysql存储过程
- mysql实现增量备份
- mysql的外键约束条件及注意事项
- mysql proxy
- mysql存储过程详解
- mysql触发器的作用及语法
- MySQL key分区(五)
- PremiumSoft Navicat for MySQL Enterprise Edition v8.0.27 注册码
- Ghost博客数据库迁移至MySQL
- MYSQL学习心得 优化
- 随机获取Mysql数据表的一条或多条记录
- MYSQL 线程池
- Mysql 正则获取字段的交集【转】