案例:通过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. Git版本控制 — 日常使用(二)

    本地使用 以下是我的一些日常操作. (1) 创建版本库 # cd /proj # git init Initialized empty Git repository in /proj/.git/ (2 ...

  2. Unity热更新之C#反射加载程序集

    用C#反射加载程序集的方式可以动态的从assetBundle资源包或其他资源包里加载脚本到工程中,即便是原工程中不存在的脚本. 我这里就用加载本地assetBundle的方式来进行讲解了,加载网络上的 ...

  3. overridePendingTransition的简介

     1 Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画. 它包括两个部分:一部分是第一个activity退出时的动画:另外一部分时第二个activity ...

  4. mt6577驱动开发 笔记版

    3 Preloader & Uboot 3.1 Preloader 3.1.1Preloader结构 Preloader的主题结构在文件:"alps\mediatek\platfor ...

  5. nasm预处理器(1)

    与处理器将所有以反斜杠结尾的连续行合并为一行. 单行的宏以%define来定义:当单行的宏被扩展后还含有其他宏时,会在执行时而不是定义时展开. %define a(x) 1+b(x) %define ...

  6. python 内置标准库socketserver模块的思考

    socketserver模块简化了编写网络服务器的任务, 在很大程度上封装了一些操作, 你可以看成是事件驱动型的设计, 这很不错.它定义了两个最基本的类--服务器类 BaseServer, 请求处理类 ...

  7. linux上搭建ftp服务器

    摘要 vsftpd 是"very secure FTP daemon"的缩写,安全性是它的一个最大的特点.vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行 ...

  8. miniUI中弹出框问题

    ---恢复内容开始--- 设置页面弹出框并提交弹出框内容 弹出按钮 <a class="btn_color_1" onclick="onEdit(0)"& ...

  9. python--Numpy and Pandas 基本语法

    numpy和pandas是python进行数据分析的非常简洁方便的工具,话不多说,下面先简单介绍一些关于他们入门的一些知识.下面我尽量通过一些简单的代码来解释一下他们该怎么使用.以下内容并不是系统的知 ...

  10. 新型USB病毒BadUSB 即使U盘被格式化也无法根除

    这种病毒并不存在于USB设备中的存储文件中,而是根植于USB设备的固件里.这意味着,即使用户对U盘进行全面的格式化清理,仍不能"杀死"它.