修改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$