MySQL触发器难不难学学_MySQL触发器trigger学习_MySQL

触发器:一类特殊的事物,可监视某种数据操作,并触发相关操作(insert/update/delete);表中的某些数据改变,希望同时可以引起其它相关数据改变的需求。

作用:变化自动完成某些语句查询,添加程序的灵活性。

创建触发器语法:

#delimiter $$ //默认情况下,delimiter是分号“;”,sql语句带有;号结尾会报错,没到end就算到结束了,使用delimiter

$$作用就是告诉mysql语句的结尾换成以$结束,相应使用end$$结束

create trigger test1 #触发器名称

(after/before) #触发时间

(insert/update/delete) #监视事件

on table #监视地点(表名)

for each row #mysql必须加的

begin

sql1

...

sqlN

end;

#end$$

查询已有trigger:show triggers

删除已有trigger:drop trigger 触发器名称

new/old:

update触发:old 代表更新前的记录。new 代表更新后的记录.

insert触发:old 不能使用。new 代表插入的记录.

delete触发:old 代表删除的记录。new 不能使用.

实例操作:

goods商品表和ord订单表

CREATE TABLE goods(

`goods_id` INT(10),

`name` VARCHAR(20),

`num` SMALLINT(4)

)ENGINE=INNODB CHARSET=utf8

CREATE TABLE `ord`(

`oid` INT(10),

`gid` INT(10),

`much` INT(10)

)ENGINE=INNODB CHARSET=utf8

INSERT INTO goods VALUES

(1, 'cat', 26),(2, 'dog', 26),(3, 'pig', 26);

1、要求每下一个订单,goods表中的库存相应减少订单的数量。

mysql> select * from goods

+----------+------+------+

| goods_id | name | num |

+----------+------+------+

| 1 | cat | 26 |

| 2 | dog | 26 |

| 3 | pig | 26 |

+----------+------+------+

3 rows in set (0.00 sec)

mysql> select * from ord;

Empty set (0.00 sec)

#创建触发器test1

DELIMITER $$

CREATE TRIGGER test1

AFTER

INSERT

ON `ord`

FOR EACH ROW

BEGIN

UPDATE goods SET num= num - new.much WHERE goods_id = new.gid;

END$$

mysql> CREATE TRIGGER test1

-> AFTER

-> INSERT

-> ON `ord`

-> FOR EACH ROW

-> BEGIN

-> UPDATE goods SET num= num - new.much WHERE goods_id = new.gid;

-> END$$

Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO `ord` VALUES (1, 2, 2)$$

Query OK, 1 row affected (0.03 sec)

mysql> select * from ord$$

+------+------+------+

| oid | gid | much |

+------+------+------+

| 1 | 2 | 2 |

+------+------+------+

1 row in set (0.00 sec)

mysql> select * from goods$$

+----------+------+------+

| goods_id | name | num |

+----------+------+------+

| 1 | cat | 26 |

| 2 | dog | 24 |

| 3 | pig | 26 |

+----------+------+------+

3 rows in set (0.00 sec)

goods表里面的dog由26变成24

2、用户取消订单后商品库存订单的商品数要正常入库。以下只写触发器trigger,操作过程不写太多比较乱。

#触发器test2

CREATE TRIGGER test2

AFTER

DELETE

ON `ord`

FOR EACH ROW

BEGIN

UPDATE goods SET num = num + old.much WHERE goods_id = old.gid;

END $$

142S92T164060-1B38.jpg

3、用户更新订单的时候,商品库存要根据订单的数量正常更新。

#触发器test3

CREATE TRIGGER test3

AFTER

UPDATE

ON `ord`

FOR EACH ROW

BEGIN

UPDATE goods SET num = num + old.much - new.much WHERE goods_id = new.gid;

END$$

142S92T193K0-251Q.jpg

查询触发器

142S92T23Z60-3B25.jpg

删除触发器

142S92T2Z620-4cM.jpg

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

TAG标签:触发器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值