0

0

小贝_mysql触发器使用_MySQL

php中文网

php中文网

发布时间:2016-06-01 12:59:43

|

1212人浏览过

|

来源于php中文网

原创

触发器

简要
1、触发器基本概念
2、触发器语法及实战例子
3、before和after区别

 

一、触发器基本概念

1、一触即发

2、作用: 监视某种情况并触发某种操作

3、观察场景

一个电子商城:

商品表,goods

主键(goods_id)

商品名称(goods_name)

库存(goods_number)

1

iphone6

10

2

小米手机

28

 

订单表,orders

订单主键(order_id)

商品主键(goods_id)

购买数量(buy_num)

1

2

3

2

1

4

从php的角度看,完成下单与减少库存的逻辑如下:

a、下单后,往orders表插入数据:

insert into orders(goods_id,bug_num)values(2,3);

b、修改goods对应商品的库存:

update goods setgoods_number=goods_number-3 where goods_id=2;

总结: 这两个逻辑可以看成是一个整体,或者说,insert—>触发update

处理方案: 使用触发器来解决上述问题,我们可以监视某张表的变化,当发生某种变化时,触发某个操作

4、触发器监视以及触发什么变化

a、监视update/insert/delete

b、触发update/insert/delete

二、触发器语法

1、创建语法的四个要素

\

2、创建触发器

2.1、测试案例的表结构

 

#商品表

create table goods

(goods_id int,goods_name varchar(10),goods_number smallint)charset=utf8;

 

insert into goods

values(1,'iphone6',10),(2,'小米手机',28);

#订单表

create table orders

(order_id int,goods_id int,buy_num smallint)charset=utf8;

 

insert into orders

values(1,2,3),(2,1,4);

 

2.2、创建触发器语法

\

 

createtrigger triggerName

after/beforeinsert/update/deleteon Table

begin

sql语句(一句或多句sql)

end;

2.3、触发器实例

2.3.1、建立触发器,往订单表orders插入数据时,更新商品表goods的库存量

\

 

往orders表插入数据前,各个表的数据如下

\

 

往orders表插入数据:

\

 

查看goods表的数据:

Removal.AI
Removal.AI

AI移出图片背景工具

下载

\

 

此时,orders表插入的是iphone6两台,但是减少的却是小米手机商品的库存。

当往orders表插入的是小米手机两台呢?

\

 

此时,减少的也是小米手机,但是减少的是1,而不是2

问题:出在哪里?

1、查看刚建立的触发器信息

\

原来触发的sql语句是固定某个商品id的,因此,触发只对该商品id发生作用

2、如何在触发器引用行的值?

对于insert而言,新增的行,用new来表示,行中的每一列的值,用new.列名来表示

3、修改触发器t1(删除原来重新建立)

\

4、验证结果

插入前,各个表数据如下

\

插入orders表,iPhone6三台

\

插入orders表,小米手机五台

\

2.3.2、建立触发器,往订单表orders删除数据时,更新商品表goods的库存量

a、建立触发器t2

\

b、删除orders的数据

b1、删除前,各个表数据

\

b2、删除后,各个表数据:

\

总结:

对于delete而言,如何在触发器引用行的值?

对于delete操作来说,它要操作的数据,已经是存在表中了,因此用old来表示,行中的每一列的值,用old.列名来表示

 

2.3.3、建立触发器,往订单表orders修改数据时,更新商品表goods的库存量

a、创建触发器t3

\

b、修改orders表数据

b1、修改前,各个表的数据

\

b2、修改后,各个表的数据

\

总结:

对于update而言,如何在触发器引用行的值?

对于update操作来说,它要操作的数据,已经是存在表中了,因此用old来引用修改前的值,修改后则为用new来引用新值

 

2.4、查看触发器和删除触发器语法

2.4.1、查看所有触发器

\

 

2.4.2、查看某个触发器

 

\

2.4.3、删除触发器

\

 

三、before与after的区别

1、区别:

a、after是先完成数据的增删改后,再触发

触发中的语句晚于增删改,无法影响前面的增删改动作

b、before是先完成触发,再增删改

触发的语句先于监视的增删改发生,我们有机会判断,修改即将发生的操作

2、案例:

对于所下订单进行判断,如果订单的数据>5,则认为是非法订单,强制把所订商品数据改成5

2.1、建立触发器

\

2.2、插入前,各个表的数据

\

 

2.3、插入后,各个表的数据

\

 


The quieter you become,the more you are able to hear!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

76

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

73

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

67

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

19

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 5.1万人学习

550W粉丝大佬手把手从零学JavaScript
550W粉丝大佬手把手从零学JavaScript

共1课时 | 0.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号