MYSQL---觸發器簡單了解
觸發器 trigger
1、觸發器是指事先為某張表綁定一段代碼,當表中某些內容發生改變(增insert、刪delete、改update)時,系統自動觸發綁定的那段代碼並執行。比如 一旦訂單表裏插入新訂單,商品的庫存數自動減N.
2、觸發器的三要素:
事件因素:insert、刪delete、改update
觸發時間:前before、後after
觸發對象:表中每條記錄,即整個表
那麽每張表可以有6個觸發器(增、刪、改3個事件的前和後)
3、創建觸發器
delimiter--自定義符號
create trigger+觸發器名稱+觸發器時間+事件類型 on 表名 for each row;
begin--觸發器內容的開始
---觸發器內容主體
end--觸發器內容結束
delimiter.--恢復語句結束符
4、以商品表goods 和訂單表odrer舉例說明觸發器,sql語句如下:
創建商品表:
create table goods(
in int primary auto_increment,
name varchar(20) not null,----- not null:意思是不允許給這個字段插入空值
price decimal(10,2) default 0,------------decimal一種數據類型,decimal(5,2)表示一共5位數,小數位2位,整數位5-2位
default:當沒有給此字段插入值時,默認給的值
inventory int comment ‘商品庫存量‘-----comment 類似註釋,備註說明的意思
)
create table goods( id int primary key auto_increment, name varchar(20) not null, price int, inventory int );
插入商品:
insert into goods values (1,‘Apple’,11,100),(2,‘Pear’,21,100);
創建訂單表
create table orders (id int primary key auto_increment, good_id int,good_num int);
創建觸發器
delimiter $$--臨時修改語句結束符
create trigger after_order after insert on orders for each row
begin---觸發器主體內容開始
update goods set invenment=invenment-1 where id=1;--觸發器主體內容,每行要以分號;結束
end---觸發器主體內容結束
$$--結束語句
deloimiter;恢復語句結束符
使用觸發器
由結果可以看出,在給訂單表添加一條記錄後,商品表中對應的商品庫存數減了1(先不管數量應該減10)
觸發器的觸發對象和事件類型,一定不能和觸發主體相同,否則容易造成死循環
MYSQL---觸發器簡單了解