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触发器在小项目中的一个简单用法。

(0)

相关推荐

  • Mysql实现企业级日志管理、备份与恢复的实战教程

    背景 随着业务的发展,公司业务和规模不断扩大,网站积累了大量的用户信息和数据,对于一家互联网公司来说,用户和业务数据是根基.一旦公司的数据错乱或者丢失,对于互联网公司而言就等于说是灭顶之灾,为防止系统出现操作失误或系统故障导致数据丢失,公司要求加强用户数据的可靠性,要求全面加强数据层面备份,并能在故障发生时第一时间恢复. 数据备份形式 文件备份: 通过Linux的备份命令把文件统一打个包存起来,可存在本地和远程服务器,等到要恢复时,再用这些文件恢复到指定位置. 数据库数据备份: 在一些对数据可靠

  • C#实现MySQL命令行备份和恢复

    MySQL数据库的备份有很多工具可以使用,这两天写了一个使用C#调用MYSQL的mysqldump命令完成MySQL数据库的备份与恢复的小工具 先来说一下mysqldump命令备份MySQL数据库的使用方法 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql 直接将MySQL数据库压缩备份 mysqldump -hhostname -uusername -ppassword databasename |

  • MySQL数据库的实时备份知识点详解

    前言 数据库实时备份的需求很常见,MySQL本身提供了 Replication 机制,摘译官方介绍如下: MySQL Replication 可以将一个主数据库中的数据同步到一个或多个从数据库中.并且这个同步过程默认以异步方式工作,不需要保持主从数据库的实时连接(即允许连接中断).同时允许自定义配置需同步的数据库及数据表. MySQL Replication 的优点及应用场景如下: 1.通过 MySQL Replication 实现负载均衡与读写分离(主数据库仅更新,从数据库仅读取),提升数据库

  • mysql备份脚本 mysqldump使用方法详解

    本文实例为大家分享了mysql备份脚本,供大家参考,具体内容如下 #!/bin/bash #全备方式,一般在从机上执行,适用于小中型mysql数据库 #删除15天以前备份 #作者:fafu_li #时间:2015.08.10 source /etc/profile #加载系统环境变量 source ~/.bash_profile #加载用户环境变量 set -o nounset #引用未初始化变量时退出 #set -o errexit #执行shell命令遇到错误时退出 user="root&q

  • Mysql数据库增量备份的思路和方法

    MySQL数据库增量备份,在这之前修改我们的数据库配置文件/etc/my.cnf开启bin-log日志功能即可.接下来是我参考了下网上的一些方法,自己写的,主要还是要能学到他的一些思路和方法. #function:MYSQL增量备份 #version:1.0.0 #author:wangyanlin #date:2017/08/02 #---------------------------------------------------------------------------------

  • Mysql实时备份实现方法

    目前成熟的实时备份为双机(master/slave),是基于同步日志事件来实现,那单机如何实现具有增量的备份呢?可以借用双机的原理,非常简单,实施步骤如下: Mysql版本:mysql4.0+ 1.vi my.cfg 复制代码 代码如下: [mysqld] log-update=/home/backup/update #添加该行 2.service mysql restart 会在/home/backup/update00001文件,内容为数据库变化的所有SQL(没有select) 3.每天的全

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

    案例: 通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能). 思路: 要有一张员工表,还要有一张员工备份表:备份,使用触发器,在点击删除按钮执行删除功能之前将员工表中的信息导入到备份表中,这样就达到了备份的效果:恢复,对备份表使用触发器,将备份表中的数据删除,删除的同时将此数据导入到员工表中:清空,使用truncate方法,将备份表中的数据彻底清空,并且释放内存,而且这个方法进行数据删除不

  • MySQL触发器运用于迁移和同步数据的实例教程

    1.迁移数据 进行数据库移植,SQL Server=>MySQL.SQL Server上有如下的Trigger SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO ALTER TRIGGER [trg_risks] ON dbo.projectrisk FOR INSERT, UPDATE AS BEGIN UPDATE projectrisk SET classification = case when calc>= 9 then 3 when

  • MySQL触发器概念、原理与用法详解

    本文实例讲述了MySQL触发器概念.原理与用法.分享给大家供大家参考,具体如下: 1.触发器的概念 触发器(trigger)是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete, update)时就会激活它执行.--百度百科 上面是百度给的触发器的概念,我理解的触发器的概念,就是你执行一条sql语句,这条sql语句的执行会自动去触发执行其他的s

  • Django项目中用JS实现加载子页面并传值的方法

    在Django的开发过程中,有一些功能是通过JS根据用户的不同选择来加载页面中的某一部分(子页面)的.如果子页面中有我们需要传入的值.可以这么实现 在js函数中调用 $("#base_page_div1").load('SUB_URL #sub_page_div1'); 此处 SUB_URL只需要是你在父页面对于URL基础上的多处部分即可.比如 父页面的URL为  /resource/base_url/    子页面的URL为: /resource/base_url/sub_url/

  • MySQL触发器基本用法详解【创建、查看、删除等】

    本文实例讲述了MySQL触发器基本用法.分享给大家供大家参考,具体如下: 一.MySQL触发器创建: 1.MySQL触发器的创建语法: CREATE [DEFINER = { 'user' | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW [trigger_order] trigger_body 2.MySQL创建语法中的关键词解释: 字段 含义 可能的值 DE

  • mysql 触发器语法与应用示例

    本文实例讲述了mysql 触发器语法与应用.分享给大家供大家参考,具体如下: 例子:创建触发器,记录表的增.删.改操作记录 //创建user表: DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `account` varchar(255) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `address` varc

  • MySQL触发器的使用

    触发器可以在执行语句前或执行后触发其他 SQL 代码运行.触发器可以读取触发语句改变了哪些数据,但是没有返回值.因此可以使用触发器加强业务逻辑的约束而不需要在应用程序写对应的代码. 从上述描述可以看到,触发器可以简化应用程序的逻辑并且可以提升性能,这是因为使用触发器减少了应用程序和服务端的交互次数.同时,触发器有助于完成自动更新归一化和统计数据.例如,我们可以使用触发器自动统计交易订单总金额,订单数及平均客单价. 然而,MySQL 的触发器的应用场合也十分有限,如果你使用过其他数据库产品的触发器

  • mysql触发器实时检测一条语句进行备份删除思路详解

    问题描述:用户有一个这样一个需求,在一张表里会不时出现 "违规" 字样的字段,需要在出现这个字段的时候,把整行的数据删掉.这是个采集任务,如果发现有"违规"字样的数据,会整点或者什么时间进行统一上报,也无法对源头进行控制让这种数据不生成. 现在需要实现以下需求: 1.实时检测这条数据的产生,发现后删除 2.在删除之前作备份这条数据 解决思路: 需要明确解决思路, 1.首先是如何实时探测删除?询问开发,这条数据的生成方式为insert,就可以做一个当表做插入的时候,然

  • MySQL实现配置主从复制项目实践

    目录 一.检测通信 二.master配置 1. 开启二进制日志 2. 创建一个用于主从库通信用的账号 3. 获取binlog文件名和position 三.slave配置 1. 配置全局唯一的server-id 2. 使用master创建的账户读取binlog同步数据 3. 开启slave服务 四.配置中可能出现的问题 1. 网络连接问题 2. binlog的position问题 3. SQL线程出错 一.检测通信 查看master(centos7)和slave(win10)的ip地址,并检测是否

  • mysql 触发器的使用及注意点

    目录 前言 一.触发器简介 二.触发器特点及使用场景 1.增强数据库的安全性 2.实现数据库操作的日志审计 3.实现复杂的级联操作 三.触发器类似与核心参数 四.触发器语法 1.创建语法 2.查看触发器 3.删除触发器 五.触发器使用案例 六.INSERT类型 触发器使用 七.UPDATE 类型触发器使用 八.DELETE 类型触发器使用 九.触发器常用场景 1.使用触发器实现两表或多表数据同步 2.审计日志记录 3.合规性检查 十.触发器使用注意点 1.可读性较差 2.相关数据的变更,可能会导

随机推荐