史上最簡單的 MySQL 教程(四十一) 觸發器

2021-08-20 03:55:44 字數 2744 閱讀 9049

觸發物件:表中的每一條記錄(行),即整張表

-- 建立觸發器基本語法

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 語句,然後執行備份。在還原的時候,只要執行備份的 ...