案例:
通過PHP后臺代碼可以將員工的信息刪除,將刪除的員工信息進行恢復(類似于從回收站中恢復員工信息),并且還可以將已經刪除的員工進行清空(類似于清空回復站的功能)。本文主要介紹了mysql觸發器在PHP項目中用來做信息備份、恢復和清空的相關資料,需要的朋友可以參考下。
思路:
要有一張員工表,還要有一張員工備份表;備份,使用觸發器,在點擊刪除按鈕執行刪除功能之前將員工表中的信息導入到備份表中,這樣就達到了備份的效果;恢復,對備份表使用觸發器,將備份表中的數據刪除,刪除的同時將此數據導入到員工表中;清空,使用truncate方法,將備份表中的數據徹底清空,并且釋放內存,而且這個方法進行數據刪除不會調用觸發器。話不多少,直接上干貨。
第一步:建表,員工表,員工備份表。
立即學習“PHP免費學習筆記(深入)”;
CREATE?TABLE?`employee`?( ?`id`?int(11)?NOT?NULL?AUTO_INCREMENT, ?`denumber`?varchar(255)?DEFAULT?'0', ?`idnumber`?varchar(255)?DEFAULT?'0', ?`worknumber`?varchar(255)?DEFAULT?'1', ?`pwd`?varchar(255)?DEFAULT?NULL, ?`emname`?varchar(255)?DEFAULT?'0', ?`tel`?varchar(255)?DEFAULT?'0', ?`salary`?int(255)?DEFAULT?'0', ?`entrytime`?varchar(255)?DEFAULT?'0', ?`orderpaixu`?int(255)?DEFAULT?'1', ?PRIMARY?KEY?(`id`) )?ENGINE=MyISAM?AUTO_INCREMENT=100?DEFAULT?CHARSET=utf8
這是員工表
CREATE?TABLE?`employeebackup`?( ?`id`?int(11)?NOT?NULL, ?`denumber`?varchar(255)?DEFAULT?NULL, ?`idnumber`?varchar(255)?DEFAULT?NULL, ?`worknumber`?varchar(255)?DEFAULT?NULL, ?`pwd`?varchar(255)?DEFAULT?NULL, ?`emname`?varchar(255)?DEFAULT?NULL, ?`tel`?varchar(255)?DEFAULT?NULL, ?`salary`?int(255)?DEFAULT?NULL, ?`entrytime`?varchar(255)?DEFAULT?NULL, ?`orderpaixu`?int(255)?DEFAULT?NULL, ?`deletetime`?datetime?DEFAULT?NULL, ?PRIMARY?KEY?(`id`) )?ENGINE=MyISAM?DEFAULT?CHARSET=utf8
員工備份表,多了一個字段deletetime,為了記錄刪除時間
第二步:備份,給員工表建觸發器(有關觸發器的資料可以查看我的另一篇博客 http://www.cnblogs.com/liebagefly/p/7517998.html),在點擊刪除按鈕執行刪除功能之前將員工表中的信息導入到備份表中。
觸發器sql代碼:
CREATE?trigger?deletesemployee?before?delete?on?employee for?each?ROW begin? ?insert?into?employeebackup?(id,denumber,idnumber,worknumber,pwd,emname,tel,salary,entrytime,orderpaixu,deletetime) values(OLD.id,OLD.denumber,OLD.idnumber,OLD.worknumber,OLD.pwd,OLD.emname,OLD.tel,OLD.salary,OLD.entrytime,OLD.orderpaixu,NOW()); end
php后臺方法,我使用的框架是yii2.
?public?function?actionEmployeedel($id) ?{ ??Employee::findOne($id)->delete(); ??return?$this->redirect(['employeemanage']); ?}
第三步:恢復,將刪除的信息進行恢復,對備份表使用觸發器,將備份表中的數據刪除,刪除的同時將此數據導入到員工表中。
觸發器sql代碼:
CREATE?trigger?deletesemployeebackup?before?delete?on?employeebackup for?each?ROW begin? ??insert?into?employee?(id,denumber,idnumber,worknumber,pwd,emname,tel,salary,entrytime,orderpaixu) values(OLD.id,OLD.denumber,OLD.idnumber,OLD.worknumber,OLD.pwd,OLD.emname,OLD.tel,OLD.salary,OLD.entrytime,OLD.orderpaixu); end
php代碼
public?function?actionRecoveremployeedel($id) ?{ ??Employeebackup::findOne($id)->delete(); ??return?$this->redirect(['recoveremployee']); ?}
除了備份,有時還要做到清空功能,使用truncate方法,將備份表中的數據徹底清空,并且釋放內存,而且這個方法進行數據刪除不會調用觸發器。
yii2的后臺中調用sql的原始寫法,即將所有已經刪除的用戶清空。
public?function?actionDropemployeedel() { ?Yii::$app->db->createCommand('truncate?table?employeebackup') ??->execute(); ?return?$this->redirect(['recoveremployee']); }
怎么樣學會了嗎?有用的話趕緊收藏起來吧。
相關推薦: