获取中...

-

Just a minute...

mysql 触发器

前言

这里呢,有两张表,分别是 CXY_TS_ORDER_TICKETCXY_TS_ORDER_TICKET_STATUS 表,在 CXY_TS_ORDER_TICKET 表里面有一个get_status字段,现在呢,我们想在该字段发生变化时,在CXY_TS_ORDER_TICKET_STATUS` 表中,将该字段插入,并且记录变化时间以及发生变化的记录的主键。因此呢,我打算用触发器去实现这个需求

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
-- Created by util.you.com@gmail.com
delimiter $$
CREATE TRIGGER `order_ticket_status_trigger` AFTER UPDATE
ON `CXY_TS_ORDER_TICKET` FOR EACH ROW
BEGIN
DECLARE s1 INT(11); -- 声明变量,用于存入 CXY_TS_ORDER_TICKET 表的 get_status 字段值,id 字段值
DECLARE s2 INT(11);
set s2 = new.id; -- 分别给 s1 和 s2 赋值
set s1 = new.get_status;
IF((old.get_status != new.get_status) OR (old.get_status IS NULL && new.get_status IS NOT NULL)) THEN
INSERT INTO `CXY_TS_ORDER_TICKET_STATUS`(`order_ticket_id`, `STATUS`, `insert_date_time`) VALUES(s2, s1, DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%s'));
END IF;
END$$

解释

在 mysql 中,newold都是内置的,分别表示一个字段发生变化前、后的值(当然也包括插入操作前后的变化),此处呢,因为我们需要根据 CXY_TS_ORDER_TICKET表的 get_status字段来插入记录到 CXY_TS_ORDER_TICKET_STATUS 表,因此呢,new 和 old 都取该字段即可。

mysql 中的触发器呢,大致分为三类:insert 型、update 型、delete 型。

何时触发该操作呢,又分为 afterbefore

上示例子,就是一个触发器的大致模板,根据哪一张表的变化来触发该触发器,就 on 这张表即可了。

相关文章
评论
分享
  • ubuntu 安装 redis

    redis是什么Redis是常用基于内存的Key-Value数据库,比Memcache更先进,支持多种数据结构,高效,快速。用Redis可以很轻松解决高并发的数据访问问题 环境Ubuntu18.04 准备工作sudo apt upda...

    ubuntu 安装 redis
  • css基本样式设置

    div中文字居中如何让一个div中的文字水平和垂直居中?设置如下:给定该div的长宽(或者二者只给出其一也可) 123456.box{ height: 100px; width: 30%; text-align: cente...

    css基本样式设置
  • nginx在centos7下的安装

    nginx是什么Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 的服务Nginx 特点是占有内存少,并发能力强一般来说,如果我们在项目中引入了 Nginx ,我们的项目架构...

    nginx在centos7下的安装
  • spring boot程序的部署及运行

    将 spring boot 应用程序打包成 jar 包 我们使用 spring boot 的 maven 插件来构建管理整个应用程序,使用 mvn package 将应用程序打包成一个 jar 包 将 该 jar 包上传到 服务器 上...

    spring boot程序的部署及运行
  • Java 中 IO 操作总结

    java IO 操作分析直接看代码吧 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535...

    Java 中 IO 操作总结