mysql级联更新的两种方式:触发器更新和外键
1.mysql级联更新有两种方式:触发器更新和外键更新.
2.触发器更新和外键更新的目的都是为了保证数据完整性。
我们通常有这样的需求:删除表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级联更新的两种方式:触发器更新和外键的更多相关文章
- mysql批量更新的两种方式效率试验<二>
Mysql两种批量更新的对比 简介: mysql搭载mybits框架批量更新有两种方式,一种是在xml中循环整个update语句,中间以‘:’隔开,还有一种是使用case when 变相实现批量更新, ...
- mysql复制表的两种方式
mysql复制表的两种方式. 第一.只复制表结构到新表 create table 新表 select * from 旧表 where 1=2 或者 create table 新表 like 旧表 第二 ...
- Oracle并行更新的两种方式(merge/update内联视图)
对于Oracle的两表联合更新的场景(有A.B两表,以A.id=B.id关联,根据B表中的记录更新A表中的相应字段),一般有update内联视图和merge两种方式,下面举例介绍: 创建用例表: ...
- linux中mysql密码找回的两种方式
方法一:修改my.cnf配置文件 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 ...
- MySql查询生日的两种方式
需要是要查询日期段内过生日的会员,分为两种情况: 1. 不跨年 例如: 查询2017-01-01到2017-01-20之间过生日的会员 (假定今天是2017-01-01则这种也可以描述为20天内过生 ...
- MySQL数据库授权的两种方式
方法一:grant命令创建用户并授权(针对只修改权限) grant命令简单语法如下: grant all privileges on dbname.* to username@localhost id ...
- Mysql 调用存储过程的两种方式
一,使用call语句: 如:创建 call 调用: 使用占位符,通过prepare,execute调用:
- 网络协议 finally{ return问题 注入问题 jdbc注册驱动问题 PreparedStatement 连接池目的 1.2.1DBCP连接池 C3P0连接池 MYSQL两种方式进行实物管理 JDBC事务 DBUtils事务 ThreadLocal 事务特性 并发访问 隔离级别
1.1.1 API详解:注册驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 原因有2个: >导致驱动被注册2 ...
- 不停止MySQL服务增加从库的两种方式
不停止MySQL服务增加从库的两种方式 转载自:http://lizhenliang.blog.51cto.com/7876557/1669829 现在生产环境MySQL数据库是一主一从,由于业务量访 ...
随机推荐
- 重拾C,一天一点点
数据类型及长度 char 字符型,占用一个字节 int 整型,通常代表特定机器中整数的自然长度 short 16位 int 16位或32位 ...
- How to change Form & Property & Report font for current User [AX2012]
对于我们开发人员来说,系统默认的字体,本人实在不喜欢,尤其是属性字体[太小,太细,根本看不清],每次做一个新项目[AX2012]第一件事就是更改字体. 由于AX2012没有像AX2009那样,可以工具 ...
- How to changes to Table & EDT Relations[AX2012]
Well I hope everyone is having a fine week so far. Oh Wednesdays, the furthermost point between two ...
- OpenNMS界面图 .
http://demo.opennms.org/opennms/login.jsp;jsessionid=zibykal1cw4b1cir8wgn0a8b0 这个是opennms的demo websi ...
- nodejs fs 模块的用途
/*** New node filefs 操作*/var fs = require(“fs”); /*创建文件 var fileName = “anps_hsj”;fs.mkdir(fileName, ...
- 保持iOS上键盘出现时输入框不被覆盖
如果屏幕中的内容项目比较多,键盘就可能覆盖住文本输入框之类的对象.你必须调整你的内容,使得输入框保持可见. 你会想到哪些处理方法呢? 第一种, 临时调整窗口中各个视图的大小,使得键盘从下向上占领的区域 ...
- MySQL、SqlServer、Oracle三大主流数据库分页查询
在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法.可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应用 ...
- C# ASP .NET WEB方向和WPF方向,我该如何去选择
一个2012年南航毕业学软件的学生,该如何去选择我的职业方向? 2011年11分月份,我被老师介绍在南京珠江路华丽国际大厦工作,开发一个大型国际物流平台,公司的开发人员比较少,设计网站的是高校的老师, ...
- 如何解决Mac与iPhone之间handoff连接问题
首先账户以及设备handoff开关问题不再赘述.主要是昨天发现的一个小技巧 当确认所有设备的iCloud账号统一.蓝牙打开.处在同一WiFi下的前提下,我的iPhone和Mac仍然handoff连接有 ...
- html+css学习笔记 [基础1]
---------------------------------------------------------------------------------------------------- ...