mysql_触发器
来源:互联网 发布:java识别图片中文文字 编辑:程序博客网 时间:2024/05/29 10:14
触发器
1、为什么需要触发器:
比如老王从员工表里面退休了,一旦delete from emp 马上就触发器把老王放在了退休员工表里面
2、什么是触发器
MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。
利用MySQL触发器可以对表进行增、删、改操作同时响应另一张表做出操作。
语法:
create trigger triggerName
after insert on order
for each row
UPDATE t_good SET goodNum=goodNum-new.orderNum
WHERE id=new.orderId;
3、使用:
CREATE TABLE t_good(
-- 主键
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-- 商品名称
goodName VARCHAR(20),
-- 商品数量
goodNum INT UNSIGNED
)
CREATE TABLE t_order(
-- 主键ID
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-- 订单ID
orderId INT UNSIGNED,
-- 订单数量
orderNum INT UNSIGNED
)
-- 插入数据,三本书,数量都是10本。
INSERT INTO t_good(goodName,goodNum)VALUES('Java编程思想',10),
('Java哈哈',10),
('Mysql',10)
-- 创建触发器
CREATE TRIGGER good_order_trigger
AFTER INSERT ON t_order
FOR EACH ROW
UPDATE t_good SET goodNum=goodNum-new.orderNum
WHERE id=new.orderId;
-- 要买的第二本书,三本,测试通过。
INSERT INTO t_order(orderId,orderNum)VALUES(2,3);
-- 但是我发现还存在两种情况,当用户删除一个订单的时候,
-- 我们直接删除一个订单,
-- 我们是不是需要把对应的商品的数量再加上去呢?
-- 解决这个问题
CREATE TRIGGER good_order_trigger2
AFTER DELETE ON t_order
FOR EACH ROW
UPDATE t_good SET goodNum=(goodNum)+old.orderNum
WHERE id =old.orderId;
-- 测试triiger 2 OK
DELETE FROM t_order WHERE id=1;
-- 既然都这样了,我们不如把那个也操作了算了。
-- 还有一个是什么,update是吧,我根据自己的理解来个测试。
CREATE TRIGGER good_order_trigger3
AFTER UPDATE t_order
FOR EACH ROW
UPDATE t_good SET goodNum=goodNum+old.goodNum-new.goodNum
WHERE id=old.orderId;
4:注意
new是新插入的数据,old是原来的数据
insert只会有new,代表着要插入的新记录
delete只会有old,代表着要删除的记录
-- 注意,单独的一个表只能有一个触发器,就是insert只能有一个,delete有一个。
1、为什么需要触发器:
比如老王从员工表里面退休了,一旦delete from emp 马上就触发器把老王放在了退休员工表里面
2、什么是触发器
MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。
利用MySQL触发器可以对表进行增、删、改操作同时响应另一张表做出操作。
语法:
create trigger triggerName
after insert on order
for each row
UPDATE t_good SET goodNum=goodNum-new.orderNum
WHERE id=new.orderId;
3、使用:
CREATE TABLE t_good(
-- 主键
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-- 商品名称
goodName VARCHAR(20),
-- 商品数量
goodNum INT UNSIGNED
)
CREATE TABLE t_order(
-- 主键ID
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-- 订单ID
orderId INT UNSIGNED,
-- 订单数量
orderNum INT UNSIGNED
)
-- 插入数据,三本书,数量都是10本。
INSERT INTO t_good(goodName,goodNum)VALUES('Java编程思想',10),
('Java哈哈',10),
('Mysql',10)
-- 创建触发器
CREATE TRIGGER good_order_trigger
AFTER INSERT ON t_order
FOR EACH ROW
UPDATE t_good SET goodNum=goodNum-new.orderNum
WHERE id=new.orderId;
-- 要买的第二本书,三本,测试通过。
INSERT INTO t_order(orderId,orderNum)VALUES(2,3);
-- 但是我发现还存在两种情况,当用户删除一个订单的时候,
-- 我们直接删除一个订单,
-- 我们是不是需要把对应的商品的数量再加上去呢?
-- 解决这个问题
CREATE TRIGGER good_order_trigger2
AFTER DELETE ON t_order
FOR EACH ROW
UPDATE t_good SET goodNum=(goodNum)+old.orderNum
WHERE id =old.orderId;
-- 测试triiger 2 OK
DELETE FROM t_order WHERE id=1;
-- 既然都这样了,我们不如把那个也操作了算了。
-- 还有一个是什么,update是吧,我根据自己的理解来个测试。
CREATE TRIGGER good_order_trigger3
AFTER UPDATE t_order
FOR EACH ROW
UPDATE t_good SET goodNum=goodNum+old.goodNum-new.goodNum
WHERE id=old.orderId;
4:注意
new是新插入的数据,old是原来的数据
insert只会有new,代表着要插入的新记录
delete只会有old,代表着要删除的记录
-- 注意,单独的一个表只能有一个触发器,就是insert只能有一个,delete有一个。
阅读全文
0 0
- mysql_触发器
- mysql_触发器
- 深入浅出mysql_触发器
- MySql_数据库触发器的使用
- MYSQL_使用外键约束(constraint)或触发器(trigger)来进行级联更新、删除
- mysql_ auto_increment
- MYSQL_配置
- MySql_安装
- mysql_索引
- Mysql_函数
- mysql_约束
- mysql_权限
- mysql_视图
- mysql_事务
- mysql_分组
- mysql_入门
- mysql_权限
- mysql_学习笔记_09
- mysql_存储过程
- GC详解及Minor GC和Full GC触发条件总结
- Image Smoothing via L0 Gradient Minimization
- 比特币的原理及运作机制
- codeforces 827D(kruskal+倍增+并查集)
- mysql_触发器
- python从入门到实践:10-6 加法运算
- Linux功耗管理(23)_Linux PM QoS framework(2)_PM QoS class
- A_Byte_Of_Python_1
- 二、log4j配置文件说明
- List<T>排序工具类---泛型和反射实现
- normalize 函数使用
- 0-1背包
- Java注解