1. 程式人生 > 資料庫 >Mysql觸發器在PHP專案中用來做資訊備份、恢復和清空

Mysql觸發器在PHP專案中用來做資訊備份、恢復和清空

案例:

通過PHP後臺程式碼可以將員工的資訊刪除,將刪除的員工資訊進行恢復(類似於從回收站中恢復員工資訊),並且還可以將已經刪除的員工進行清空(類似於清空回覆站的功能)。

思路:

要有一張員工表,還要有一張員工備份表;備份,使用觸發器,在點選刪除按鈕執行刪除功能之前將員工表中的資訊匯入到備份表中,這樣就達到了備份的效果;恢復,對備份表使用觸發器,將備份表中的資料刪除,刪除的同時將此資料匯入到員工表中;清空,使用truncate方法,將備份表中的資料徹底清空,並且釋放記憶體,而且這個方法進行資料刪除不會呼叫觸發器。話不多少,直接上乾貨。

第一步:建表,員工表,員工備份表。

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,`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,orderpaixu)
values(OLD.id,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']);
}

以上就是mysql觸發器在小專案中的一個簡單用法。