mysql基礎三 觸發器

商品表-- Table "goods" DDL:mysql

CREATE TABLE goods (
gid int(11) NOT NULL,
name varchar(20) DEFAULT NULL,
num smallint(6) DEFAULT NULL,
PRIMARY KEY (gid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;sql

訂單表-- Table "orders" DDL:ide

CREATE TABLE orders (
oid int(11) NOT NULL,
gid int(11) DEFAULT NULL,
much smallint(6) DEFAULT NULL,
create_time datetime DEFAULT NULL,
PRIMARY KEY (oid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;code

1、insert觸發器:
(1)、after觸發器:
需求:客戶購買某個商品後,商品的庫存數量自動減小。blog

create trigger trigerafterInsertOrder
after insert
on orders
for each row
begin it

update goods set num=num-new.much where gid=new.gid;

end;class

(2)、before觸發器:
需求:客戶購買某個商品後,商品的庫存數量自動減小。
同時訂單表的create_time爲當前時間。基礎

create trigger trigerbeforeInsertOrder
before insert
on orders
for each row
begin
update goods set num=num-new.much where gid=new.gid;
set new.create_time=now();變量

end;date

注意:new 表示orders表新增行。

2、delete觸發器:

需求:客戶取消訂單後,商品表的庫存數量自動增長。

create trigger triggerDeleteOrder
after delete
on orders
for each row

begin

update goods set num=num+old.much where gid=old.gid

end;

注意:old 表示orders表刪除行。

3、update 觸發器:

需求:客戶修改訂單購買的數量,商品表的庫存數量自動改變。

create trigger triggerUpdateOrder
before update
on orders
for each row

begin

update goods set num=num+old.much-new.much where gid=old.gid;

end;


4、after和before觸發器的區別:

一、after是先完成數據的增刪改,再觸發,觸發的語句晚於監視的增刪改操做,沒法影響前面的增刪改動做。

二、before是先完成觸發,再增刪改,觸發的語句先於監視的增刪改。

例1:對於上面的trigerbeforeInsertOrder這個觸發器,由於同時要對orders表的create_time字段賦值。
對字段create_time的賦值操做要早於insert,所以使用before觸發器。
注意:若是此時使用after觸發器會報Updating of new row is not allowed in after trigger 錯誤。

例2:爆倉業務的檢查即客戶購買某個商品,購買商品的數量若是超過庫存數量則購買數量爲庫存數量,同時商品表的庫存數量自動改變。

create trigger triggerBeforeInsertOrder before insert on orders for each row

begin

declare kcNum int;

select num into kcNum from goods where gid=new.gid;

if new.much>kcNum then
set new.much=kuNum;
end if;

update goods set num=num-new.much where gid=new.gid;

end;

注意:若是此時使用after觸發器會報Updating of new row is not allowed in after trigger 錯誤。

5、觸發器引用行變量

下圖一目瞭然地描述了觸發器的行變量new和old。

mysql基礎三 觸發器
mysql基礎三 觸發器

相關文章
相關標籤/搜索