觸發物件:表中的每一條記錄(行),即整張表
。
-- 建立觸發器基本語法
delimiter 自定義符號 -- 臨時修改語句結束符,在後續語句中只有遇到自定義符號才會結束語句
create
trigger + 觸發器名稱 + 觸發器時間 + 事件型別 on 表名 for
each
rowbegin -- 代表觸發器內容開始
-- 觸發器內容主體,每行用分號結尾
end -- 代表觸發器內容結束
自定義符號 -- 用於結束語句
delimiter ;
-- 恢復語句結束符
-- 建立商品表
create
table goods(
id int
primary
key auto_increment,
name varchar(20) not
null,
price decimal(10, 2) default
0, inventory int comment '商品庫存量'
)charset utf8;
-- 插入兩條資料
insert
into goods values(null, 'iphone8', 5088, 1000), (null, 'iphonex', 8088, 1000);
-- 建立訂單表
create
table orders(
id int
primary
key auto_increment,
goods_id int
notnull,
goods_number int
default
1)charset utf8;
-- 建立觸發器
delimiter $$ -- 臨時修改語句結束符
create
trigger after_order after
insert
on orders for
each
rowbegin -- 觸發器內容開始
-- 觸發器內容主體,每行用分號結尾
update goods set inventory = inventory - 1
where id = 1;
end -- 觸發器內容結束
$$ -- 結束語句
delimiter ;
-- 恢復語句結束符
-- 查詢所有觸發器,\g 表示旋轉
show triggers\g;
-- 查詢觸發器建立語句,\g 表示旋轉
show
create
trigger after_order\g;
-- 查詢觸發器,\g 表示旋轉
select * from information_schema.triggers\g;
-- 檢視商品表
select * from goods;
-- 檢視訂單表
select * from orders;
-- 插入訂單表
insert
into orders values(null, 2, 10);
-- 檢視訂單表
select * from orders;
-- 檢視商品表
select * from goods;
-- 刪除觸發器
drop
trigger after_order;
-- 查詢觸發器
show triggers;
action_reference_new_row:new
new
,代表是新記錄,也就是假設操作發生之後記錄的狀態,刪除時沒有new
。
-- 建立新觸發器
delimiter $$ -- 臨時修改語句結束符
create
trigger after_order_new after
insert
on orders for
each
rowbegin -- 觸發器內容開始
-- 觸發器內容主體,每行用分號結尾
update goods set inventory = inventory - new.goods_number where id = new.goods_id;
end -- 觸發器內容結束
$$ -- 結束語句
delimiter ;
-- 恢復語句結束符
-- 檢視新觸發器
show triggers\g;
-- 檢視商品表
select * from goods;
-- 檢視訂單表
select * from orders;
-- 插入訂單表
insert
into orders values(null, 2, 10);
-- 檢視訂單表
select * from orders;
-- 檢視商品表
select * from goods;
史上最簡單的 MySQL 教程(四十一) 觸發器
案例 網上購物,根據生產訂單的型別,商品的庫存量對應的進行增和減。此案例涉及兩張表,分別為訂單表和商品表,下單時,商品表庫存減少 退單時,商品表庫存增加。如何實現?觸發器 trigger,是指事先為某張表繫結一段 當表中的某些內容發生改變 增 刪 改 的時候,系統會自動觸發 並執行。觸發器包含三個要...
史上最簡單的 MySQL 教程(十七) 索引
索引 系統根據某種演算法,將已有的資料 未來可能新增的資料 單獨建立乙個檔案,這個檔案能夠實現快速匹配資料,並且能夠快速的找到對應的記錄,幾乎所有的索引都是建立在字段之上的。索引的意義 但是增加索引是有前提條件的,這是因為索引本身會產生索引檔案 有的時候可能會比資料本身都大 因此非常耗費磁碟空間。m...
史上最簡單的 MySQL 教程(三十七)
基礎概念 為什麼要進行資料的備份與還原?資料備份與還原的方式有很多種,具體可以分為 資料表備份 單錶資料備份 sql備份和增量備份。sql 備份,備份的是 sql 語句。在進行 sql 備份的時候,系統會對錶結構以及資料進行處理,變成相應的 sql 語句,然後執行備份。在還原的時候,只要執行備份的 ...