mysql触发器实现+备份_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,

`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']);

}

以上就是mysql触发器在小项目中的一个简单用法。

本文标题: Mysql触发器在PHP项目中用来做信息备份、恢复和清空

本文地址: http://www.cppcns.com/shujuku/mysql/210777.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值