MySQL的触发器
- 1 概述
- 2 案例1:创建触发器
- 2.1 创建一个简单的 INSERT触发器
- 2.2 创建一个变化的 INSERT触发器
- 2.3 验证以上两个 INSERT触发器的效果
- 2.4 创建一个变化的 DELETE触发器
- 2.5 删除触发器
- 2.6 练习
转载请注明出处 ????!
手动反爬:MySQL的触发器(CREATE TRIGGER…AFTER/BEFORE INSERT ON/DELETE ON…FOR EACH ROW…)
https://blog.csdn.net/Lyun911/article/details/111713606
注:以下使用 MySQL 演示
1 概述
MySQL语句在需要时被执行,存储过程也是如此。但是,如果你想要某条语句(或某些语句)在事件发生时自动执行,怎么办呢?例如:
- 每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州的缩写是否为大写
- 每当订购一个产品时,都从库存数量中减去订购的数量
- 无论何时删除一行,都在某个存档表中保留一个副本
触发器是MySQL响应以上任意语句而自动执行的一条MySQL语句
2 案例1:创建触发器
2.1 创建一个简单的 INSERT触发器
在我们执行 insert
update
delete
语句时,自动执行另一组 SQL语句的功能
创建触发器:
(目标:创建一个在 products表中插入内容时,添加 'Product add’这句话到变量 @ee中的 触发器)
create TRIGGER newproduct AFTER INSERT ON products # 创建一个
FOR EACH ROW SELECT 'Product add' INTO @ee; # 每创建一列新的内容时,在 @ee中新增 'Product add'
2.2 创建一个变化的 INSERT触发器
将新插入的部分内容加入 @ee中
create TRIGGER newproduct AFTER INSERT ON products
FOR EACH ROW SELECT new.prod_id INTO @ee; # 将新插入的内容加入 @ee中
将旧的内容加入 @ee中(备份)
create TRIGGER newproduct AFTER INSERT ON products
FOR EACH ROW SELECT old.prod_id INTO @ee; # 将旧的内容加入 @ee中
注:也可以使用 new.*
/ old.*
将所有的新/旧内容加入 @ee中
2.3 验证以上两个 INSERT触发器的效果
首先写一个插入数据的测试代码,运行
insert into products
(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES
('ANV21', '1001', '3 Ton anvil', '19.99',
'desctibe123 123'
);
查看一下 @ee
SELECT @ee;
2.4 创建一个变化的 DELETE触发器
目标:当删除数据时,备份数据到表 deleteorder中
create TRIGGER deleteorder BEFORE DELETE ON orders
FOR EACH ROW
BEGIN
insert into archive_orders(order_num, order_date, cust_id)
values(old.order_num, old.order_date, old.cust_id);
END;
验证一下触发器,首先得创建一个 deleteorder表(空表),而且表结构要和 orders一样:
(相当于 deleteorder表是 orders表的一个备份,然后删除里面的数据)
create table archive_orders as select * from orders; # 创建一个 orders的备份
delete from archive_orders; # 删除 archive_orders里面的数据
select * from archive_orders; # 看看效果
2.5 删除触发器
drop TRIGGER newproduct;
2.6 练习
练习:UPDATE 触发器怎么做?
TIPS:
- INSERT 是在空的数据位置直接新增数据,因此没有 old.数据
- DELETE 是在已有数据的位置删除数据,因此有 new.数据,但是不怎么用 old.数据
- UPDATE 在更新数据时,其实要先删除原数据,之后再新增一个新的数据
最后
以上就是能干小蚂蚁最近收集整理的关于【数据分析师_02_SQL+MySQL】028_MySQL的触发器(CREATE TRIGGER..AFTER/BEFORE INSERT ON/DELETE ON..FOR EACH ROW..)1 概述2 案例1:创建触发器的全部内容,更多相关【数据分析师_02_SQL+MySQL】028_MySQL的触发器(CREATE内容请搜索靠谱客的其他文章。
发表评论 取消回复