案例:通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能)。

思路:要有一张员工表,还要有一张员工备份表;备份,使用触发器,在点击删除按钮执行删除功能之前将员工表中的信息导入到备份表中,这样就达到了备份的效果;恢复,对备份表使用触发器,将备份表中的数据删除,删除的同时将此数据导入到员工表中;清空,使用truncate方法,将备份表中的数据彻底清空,并且释放内存,而且这个方法进行数据删除不会调用触发器。话不多少,直接上干货。

第一步:建表,员工表,员工备份表。

 1 CREATE TABLE `employee` (
 2   `id` int(11) NOT NULL AUTO_INCREMENT,
 3   `denumber` varchar(255) DEFAULT '0',
 4   `idnumber` varchar(255) DEFAULT '0',
 5   `worknumber` varchar(255) DEFAULT '1',
 6   `pwd` varchar(255) DEFAULT NULL,
 7   `emname` varchar(255) DEFAULT '0',
 8   `tel` varchar(255) DEFAULT '0',
 9   `salary` int(255) DEFAULT '0',
10   `entrytime` varchar(255) DEFAULT '0',
11   `orderpaixu` int(255) DEFAULT '1',
12   PRIMARY KEY (`id`)
13 ) ENGINE=MyISAM AUTO_INCREMENT=100 DEFAULT CHARSET=utf8
14 这是员工表
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项目中用来做信息备份、恢复和清空的方法介绍的更多相关文章

  1. MYSQL触发器在PHP项目中用来做信息备份、恢复和清空

    案例:通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能). 思路:要有一张员工表,还要有一张 ...

  2. MySQL触发器的正确使用与案例分析

    以下的文章主要向大家讲述的是MySQL触发器的实际使用详细说明与实际案例分析,同时本文也列举了一些在MySQL触发器的实际式操作中的代码,以下就是文章的详细内容介绍,望大家借鉴. 触发器案例 mysq ...

  3. mysql触发器Before和After的区别

    Before与After区别:before:(insert.update)可以对new进行修改.                    after不能对new进行修改.                 ...

  4. MySQL中表的复制以及大型数据表的备份教程

    MySQL中表的复制以及大型数据表的备份教程     这篇文章主要介绍了MySQL中表的复制以及大型数据表的备份教程,其中大表备份是采用添加触发器增量备份的方法,需要的朋友可以参考下 表复制 mysq ...

  5. 转 基于MySQL MEB的备份恢复

    几种备份方式的介绍 mysqlbackup是一个热备份工具.也就是说它不像mysqldump那样给表上一个全局锁,由于mysqldump上了这个锁,所以就造成客户端只能对 数据库进行读操作不能写,这也 ...

  6. 基于MySQL MEB的备份恢复

    MEB(MySQL Enterprise Backup)是MySQL商业版中提供的备份工具,属于物理备份. 同XtraBackup一样,mysqlbackup的使用过程同样包含如下三个步骤: 备份(- ...

  7. 关于mysql触发器和存储过程的理解

    内容源自:一篇很棒的 MySQL 触发器学习教程 一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊 ...

  8. 一篇很棒的 MySQL 触发器学习教程

    一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动 ...

  9. MySQL 触发器trigger

    一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(af ...

随机推荐

  1. JSP连接access数据库

    一个用jsp连接Access数据库的代码. 要正确的使用这段代码,你需要首先在Access数据库里创建一username表,表里面创建两个字符型的字段,字段名分别为:uid,pwd,然后插入几条测试数 ...

  2. (四十一)数据持久化的NSCoding实现 -实现普通对象的存取

    NSCoding可以用与存取一般的类对象,需要类成为NSCoding的代理,并且实现编码和解码方法. 假设类Person有name和age两个属性,应该这样设置类: .h文件: #import < ...

  3. 新手自定义view练习实例之(二) 波浪view

    本系列是为新手准备的自定义view练习项目(大牛请无视),相信在学习过程中,想学自定义view又无从下手,不知道做什么.本系列为新手提供了一系列自定义view的简单实例.看过理解之后,自己实现,相信会 ...

  4. Java集合之Hashtable

    和HashMap一样,Hashtable也是一个散列表,存储的内容也是键值对key-value映射.它继承了Dictionary,并实现了Map.Cloneable.io.Serializable接口 ...

  5. Salesforce开发入门

    云计算风起云涌,已成势不可挡之势.公司好多项目都依托于云平台了,网络安全采用了zscaler,人力资源系统用的workday,我们case系统也用了salesforce,我自己也在用运行于Google ...

  6. mysql_建立索引的优缺点

    http://blog.csdn.net/superit401/article/details/51291603 建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能.  ...

  7. C语言设计模式-封装-继承-多态

    快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们 ...

  8. 漫谈jdbc

    本文可作为北京尚学堂jdbc课程的学习笔记; 简介 jdbc是什么东西? jdbc全称(Java Database Connectivity java数据库连接) 它是干什么的? 至于它是干什么的,那 ...

  9. Android 内核常见目录的作用

    / :根目录 /bin目录 :命令保存目录,普通用户就可以读取的命令. /boot目录 :启动目录,启动相关文件 /dev :设备文件保存目录 /etc :配置文件保存目录 /home :普通用户的家 ...

  10. JFinal开发环境搭建,JFinal开发案例

     JFinal  是基于 Java  语言的极速  WEB  + ORM  开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java 语言所 ...