我们通常有这样的需求:删除表Table 1中记录,需要同时删除其它表中与Table 1有关的若干记录。

举个例子:

现有2个实体- 麻将机 学生、课程,1种联系- 成绩

分别创建 学生表 students, 课程表course,成绩表score

--创建 学生表 students

CREATE TABLE IF NOT EXISTS `students` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(32) DEFAULT "",

PRIMARY KEY (`id`)

) ENGINE=InnoDB;

--插入若干记录

INSERT INTO `students` (`id`, `name`) VALUES

(1, "john"),

(2, "lucy"),

(4, "jack");

--创建课程表

CREATE TABLE IF NOT EXISTS `course` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(32) DEFAULT "",

PRIMARY KEY (`id`)

) ENGINE=InnoDB;

-- 插入数据若干

INSERT INTO `course` (`id`, `name`) VALUES

(1, "english"),

(2, "chinese"),

(3, "math");

--创建成绩表

--sid 学生id

--cid 课程id

CREATE TABLE IF NOT EXISTS `score` (

`sid` int(11) DEFAULT "0",

`cid` int(11) DEFAULT "0",

`score` float(6,2) DEFAULT "0.00",

KEY `sid` (`sid`),

KEY `cid` (`cid`)

) ENGINE=InnoDB;

--插入若干数据

INSERT INTO `score` (`sid`, `cid`, `score`) VALUES

(1, 2, 95.00),

(1, 3, 65.00),

(2, 1, 77.00),

(2, 2, 68.50),

(2, 3, 89.00);

现在,我希望:

删除students表记录的同时,自动删除成绩表中该同学的记录

删除course表记录的同时,自动删除成绩表中该课程的记录

我想到的做法有二:

一,使用innodb表的外键约束

ALTER TABLE `score`

ADD CONSTRAINT `student_ibfk1`

FOREIGN KEY `sid`(`sid`) REFERENCES `students` (`id`)

ON DELETE CASCADE ON UPDATE CASCADE;

这里CASCADE作用就是在父表记录更新或删除时,子表更新或删除相应的记录

外键约束的动作除了CASCADE,还有RESTRICT(限制删除)SET NULL(设为空值,字段如果允许为空的话)等

外键约束文档详见:http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html

二,使用触发器trigger进行操作

由于外键约束只能用于Innodb型表,因些对于MyIsam型表还得用trigger来进行更新

--以下触发器在删除students后同时删除表score中相关记录

DROP TRIGGER IF EXISTS `deleteScore`//

CREATE TRIGGER `deleteScore` AFTER DELETE ON `students`

FOR EACH ROW BEGIN

DELETE FROM score WHERE sid=OLD.`id`;

END

//

触发器比较好理解,其中AFTER是事件发生后,有的需求可能用BEFORE;事件类型有INSERT,REPLACE,UPDATE,DELETE等

这里的”//”是delimiter,用来标记触发器开始与结束

MYSQL_使用外键约束(constraint)或触发器(trigger)来进行级联更新、删除相关推荐

  1. 数据库建表需要外键约束吗?

    建立外键的好处:  1) 由数据库保证数据完整性,比程序保证完整性更可靠,  多应用时(如有应用A,B,C他们之间的实体存在关联关系),由程序来保证数据完整性变得困难  2) 外键约束使得数据库的ER ...

  2. MySQL的外键约束

    一.MySQL外键 外键表示一个表中的一个字段被另一个表中的一个字段引用.外键对相关表中的数据造成了限制,使MySQL的能够保持参照完整性.只有InnoDB类型的表才可以使用外键. 1.外键的好处 可 ...

  3. mysql 外键约束_MySQL之外键约束(FOREIGN KEY)

    定义: MySQL外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列.一个表可以有一个或多个外键. 外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每 ...

  4. mysql外键_MySQL外键约束(FOREIGN KEY)

    MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用.对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表). 外键用 ...

  5. 什么是外键约束?外键约束下的多表操作是什么?

    什么是外键约束? MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用.对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表 ...

  6. MySQL多表操作的外键约束

    目录 一.多表关系 一对一关系 一对多/多对一关系 多对多关系 二.外键约束 特点 创建外键约束 方式1-在创建表时设置外键约束 方式2-在创建表时设置外键约束 在外键约束下的操作 1.数据插入 2. ...

  7. 4、外键约束(FOREIGN KEY)

    MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用.对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表). 外键用 ...

  8. mysql中的外键约束_MySQL外键约束

    在本教程中,您将了解MySQL外键(foreign key)以及如何在MySQL中创建,添加和删除外键约束. MySQL外键简介 外键表示一个表中的一个字段被另一个表中的一个字段引用.外键对相关表中的 ...

  9. 外键约束(foreign key) [MySQL][数据库]

    外键约束(FOREIGN KEY(字段) REFERENCES 主表名(字段)) 外键约束的作用: 限定某个字段的引用完整性 我们之前在讲数据完整性的时候就提到过引用完整性 引用完整性(eg: 员工所 ...

最新文章

  1. mysql 名字分组查询id_mysql进阶5:分组查询
  2. vistualSVN server:Windows下SVN服务器利器
  3. Zookeeper一致性级别分析,终于彻底把握了
  4. 交叉编译php-5.6.30,linux下用arm-none-linux-gnueabi交叉编译arm内核模块
  5. 初探Golang(3)-数据类型
  6. python3 centos7 Python.h无法找到
  7. CentOS7安装 MySQL主从集群
  8. java怎么区分变量和方法_如何测试Java的变量和方法
  9. 倒计时 分秒 小程序 方法_小程序天/小时/分秒倒计时封装
  10. 利用.htaccess绑定域名到子目录
  11. python模块使用教程详解_python之mock模块基本使用方法详解
  12. 通俗易懂讲解javaSocket编程
  13. html+CSS+JS实现小米官网(附全部代码)
  14. python-seleium实现珞珈在线网课辅助观看功能
  15. sklearn的系统学习——随机森林调参(含案例及完整python代码)
  16. 推荐一位字节大佬的刷题经验!
  17. 【CTS2019】氪金手游(动态规划)
  18. eclipse J2EE软件下载
  19. 2021东三省数学建模竞赛a题
  20. 小区网络视频监控系统解决方案

热门文章

  1. 【Windows 逆向】内存地址分析 ( 内存条 | 虚拟内存 | 内存地址及寻址范围 | 内存地址与数据的关系 )
  2. 【Android 返回堆栈管理】打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task
  3. 【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( Not enough information to infer type variable T )
  4. [docker] 04 使用docker容器
  5. 【Hibernate步步为营】--(一对多映射)之单向关联
  6. springmvc学习资料整理
  7. 1.嵌入式系统的简介
  8. Js弹性漂浮广告代码
  9. 通用寄存器的专门用途
  10. 什么叫碎片,碎片对io的影响以及什么叫物理顺序,什么叫逻辑