1. 程式人生 > >MYSQL---觸發器簡單了解

MYSQL---觸發器簡單了解

each apple _id 庫存 delet 簡單 執行 num AC

觸發器 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---觸發器簡單了解