觸發器(trigger)

修改mysql定界符

delimiter+定界符
eg:delimiter $

查看所有觸發器

show triggers 定界符;
eg:show triggers $

刪除觸發器

drop trigger 觸發器名稱+定界符
eg:drop trigger tg1 $

創建觸發器

注意:

  • 同一個數據庫的觸發器名稱不能重復
  • 同一張表的同一個事件不能有兩個觸發器
以商品表和訂單表為例

tp_goods

CREATE TABLE tp_goods (
id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '緙栧彿',
name varchar(255) NOT NULL COMMENT '鍟嗗搧鍚嶇О',
num int(10) unsigned NOT NULL COMMENT '搴撳瓨閲?,
PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

tp_orders

CREATE TABLE tp_orders (
oid int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '璁㈠崟id',
gid int(10) unsigned NOT NULL COMMENT '鍟嗗搧id',
much int(10) unsigned NOT NULL COMMENT '鍟嗗搧鏁伴噺',
PRIMARY KEY (oid)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

觸發器1(添加數據):

監視訂單表,插入數據后,修改商品表庫存量
create trigger tg1
before insert on tp_orders
for each row
begin
-- 根據商品id 查詢商品表的商品數量
-- 在mysql中定義變量
declare rnum int;
select num into rnum from tp_goods where id = new.gid;
if new.much>rnum
then set new.much = rnum;
end if;
update tp_goods set num=num-new.much where id = new.gid;
end$

觸發器2(修改數據):

監視訂單表,修改數據后,修改商品表的庫存量
create trigger tg2
before update on tp_orders
for each row
begin
-- 查詢商品表剩余庫存量
declare rnum int;
select num into rnum from tp_goods where id = new.gid;
if rnum+old.much<new.much
then
set new.much = rnum + old.much;
end if;
update tp_goods set num = num + old.much - new.much where id = new.gid;
end$

觸發器3(刪除數據):

監視訂單表, 刪除數據后,修改商品表記錄
create trigger tg3
after delete on tp_orders
for each row
begin
update tp_goods set num = num + old.much where id = old.gid;
end$

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容