各位用户为了找寻关于Mysql触发器在PHP项目中用来做信息备份、恢复和清空的资料费劲了很多周折。这里教程网为您整理了关于Mysql触发器在PHP项目中用来做信息备份、恢复和清空的相关资料,仅供查阅,以下为您介绍关于Mysql触发器在PHP项目中用来做信息备份、恢复和清空的详细内容
案例:
通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能)。
思路:
要有一张员工表,还要有一张员工备份表;备份,使用触发器,在点击删除按钮执行删除功能之前将员工表中的信息导入到备份表中,这样就达到了备份的效果;恢复,对备份表使用触发器,将备份表中的数据删除,删除的同时将此数据导入到员工表中;清空,使用truncate方法,将备份表中的数据彻底清空,并且释放内存,而且这个方法进行数据删除不会调用触发器。话不多少,直接上干货。
第一步:建表,员工表,员工备份表。
? 1 2 3 4 5 6 7 8 9 10 11 12 13CREATE
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
这是员工表
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14CREATE
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代码:
? 1 2 3 4 5 6CREATE
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.
? 1 2 3 4 5public
function
actionEmployeedel($id)
{
Employee::findOne($id)->
delete
();
return
$this->redirect([
'employeemanage'
]);
}
第三步:恢复,将删除的信息进行恢复,对备份表使用触发器,将备份表中的数据删除,删除的同时将此数据导入到员工表中。
触发器sql代码:
? 1 2 3 4 5 6CREATE
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代码
? 1 2 3 4 5public
function
actionRecoveremployeedel($id)
{
Employeebackup::findOne($id)->
delete
();
return
$this->redirect([
'recoveremployee'
]);
}
除了备份,有时还要做到清空功能,使用truncate方法,将备份表中的数据彻底清空,并且释放内存,而且这个方法进行数据删除不会调用触发器。
yii2的后台中调用sql的原始写法,即将所有已经删除的用户清空。
? 1 2 3 4 5 6public
function
actionDropemployeedel()
{
Yii::$app->db->createCommand(
'truncate table employeebackup'
)
->
execute
();
return
$this->redirect([
'recoveremployee'
]);
}
以上就是mysql触发器在小项目中的一个简单用法。
原文链接:http://www.cnblogs.com/liebagefly/p/7820324.html