> ### ***觸發器簡單地理解為監視某種操作而觸發另一種操作***
*****
舉個簡單的例子:當用戶在注銷自己的賬號時,一是為了能留住用戶,二是為了整個網站做分析而用到的數據,因為數據是非常寶貴的,如果我們直接對數據表進行刪除的話,就會丟掉很多的數據,使得我們后期的工作會遇到困難。
如何處理這個業務呢?
可能很多人都會認為在用戶表中設置一個字段,如status,可以操作status,如果注銷那么就將status的1改為0,就可以判斷出用戶是否注銷,這樣做是非常可以的,但是我們想一想,如果用戶數據比較龐大時,注銷的人數較多時,這時用戶表中就會存在很多的無用的用戶數據,這對于數據的讀取恨性能帶來了一定的影響。
為了解決上述帶來的問題,MySQL的觸發器來了,用觸發器可以很好地解決上述問題,就是建立一個觸發器,當監聽用戶表中的數據被刪除時,然后觸發跟用戶表結構一致的一張表進行添加,(如,user_bak表),這樣用戶注冊的數據全部轉移到user_bak表,這樣即保證了數據不會物理刪除,也保證了原數據表的讀取性能,這就是觸發器的好處,觸發器雖然為我們提供了一個非常便利的操作,但是由于MySQL的觸發器是行級觸發器,因此在整個性能上還是會受到影響的。
下面通過代碼實現:
```
#創建觸發器
delimiter //;
create trigger tri_user
after delete
on dou_users for each row
begin
insert into dou_users_bak values(old.id,old.username,old.password);
end;
#試著執行一條刪除語句:
delete from user_info where id = 2;
```
查看user_bak表,果然多出一條uid為2的數據,說明,觸發器已經運行。
> 注:字段名要一 一對應起來,否則會報錯的。