MySQL學習分享之觸發器

2021-10-06 04:41:24 字數 2540 閱讀 9092

所有這些例子的共同之處是它們都需要在某個表發生更改時自動處理。這確切地說就是觸發器。

觸發器(trigger)是由事件來觸發某個操作。這些事件包括insert語句、update語句和delete語句。當資料庫系統執行這些事件時,會啟用促發其執行相應的操作。

事件型別

增刪改三個型別。

觸發時間

前後:before和after。

觸發物件

表中的每一條記錄(行)。

一張表中只能擁有一種觸發時間的一種型別的觸發器,最多一張錶能有6個觸發器。

create [or replace] trigger trigger_name

triggering_event on table_name

[for each row]

[follows another_trigger]

[enable/disable]

[when condition]

declare

declaration statements

begin

executable statements

exception

exception-handling statements

end;

delimiter //

create trigger stock_change after insert on my_order for each row

begin

update my_stock s set s.p_stock = s.p_stock - 1 where s.p_id = 1;

end //

檢視所有觸發器:

show triggers;
檢視觸發器建立語言

show create trigger 觸發器名字
show create trigger stock_change;
所有的觸發器都會儲存一張表中:information_schema.triggers

select * from information_schema.triggers; -- 可查詢
觸發器不需要手動呼叫,而是當某種情況發生時會自動觸發。(當往my_order表中插入資料時,觸發器發動,my_stock表存貨會減少。)

通過使用觸發器,發現我們之前建立的觸發器並沒有用,於是先將他刪除再結合觸發器記錄所學的知識建立乙個新的可用的觸發器。

-- drop trigger 觸發器名字

drop trigger stock_change;

觸發器記錄:不管觸發器是否觸發了,只要當某種操作準備執行,系統就會將當前要操作的記錄的當前狀態和即將執行之後新的狀態給分別保留下來,供觸發器使用:其中,要操作的記錄的當前狀態儲存到old中,操作之後的可能形態儲存給new。

old代表的是舊紀錄,new代表的是新紀錄。刪除的時候是沒有new的,插入的時候是沒有old的。

old和new都是代表記錄本身:任何一條記錄除了有資料,還有欄位名字。

使用方法:old.欄位名/new.欄位名

通過使用發現之前建立的觸發器是錯誤的,不能起到需要的作用,現通過觸發器記錄來修改這個程式:

delimiter //

create trigger stock_change after insert on my_order for each row

begin

update my_stock s set s.p_stock = s.p_stock - new.p_number where s.p_id = new.p_id;

end //

-- 建立庫存表

create table my_stock(

p_id int primary key comment '產品編號' auto_increment,

p_name varchar(32) comment '產品名' not null,

p_price decimal(7,2) comment '產品**' default 1,

p_stock int comment '產品庫存')charset utf8;

-- 建立訂單表

create table my_order(

id int primary key comment '訂單號' auto_increment,

p_id int comment '商品id',

p_number int comment '商品數量');

-- 插入庫存資訊

insert into my_stock values (1,'小公尺10',3999,100),

(2,'華為p40',4999,110),

(3,'iphone x',5000,80),

(4,'iphone 7',1000,10);

MySQL學習之觸發器

對觸發器的理解 觸發器和儲存過程一樣,都是嵌入在mysql中的一段程式,兩者區別是 觸發器是由事件觸發產生,而儲存過程則是由 call 來呼叫的。觸發器主要用於滿足複雜的業務要求。一 建立觸發器 1 建立乙個執行語句的觸發器 create trigger trigger name trigger t...

mysql之觸發器詳解 MySQL之觸發器詳解

觸發器 trigger 監事某種情況,並出發某種操作。觸發器建立語法四要素 1 監視地點 table 2 監視事件 insert update delete 3 觸發時間 after before 4 觸發事件 insert update delete create trigger triggern...

MySQL之觸發器

觸發器是個特殊的儲存過程 當乙個預定義的事件發生的時候,被mysql自動呼叫 1 建立只有乙個執行語句的觸發器 create trigger trigger name trigger time trigger event on tb1 name for each row trigger stmttr...