mysql触发器 当记录的指定字段发生变化时,更新表中的另外一个字段,或者更新另外一张关联表中关联记录的字段...

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

注意:语句中出现的old,new,now(),都为数据库自带的关键字,此处不做解释。

两种情况:

        第一种:一张表中,更新某条记录的其中的一个字段,触发指定的触发器,记录时间即更新到这条记录中的另一个字段中。

        第二种:两张表,当A表更新其中某条记录的某个字段时,触发指定的触发器,更新B表与A表关联的记录的某个字段。

对于第一种情况:

    模拟如下:

表结构:test表

CREATE TABLE `test` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`pwd` varchar(255) DEFAULT NULL,
`date` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

触发器:

CREATE TRIGGER `test_haa` BEFORE UPDATE ON `test` FOR EACH ROW BEGIN
if (OLD.pwd != new.pwd) or (OLD.pwd IS NULL && new.pwd IS NOT NULL)
THEN
set new.date=now() ;
END if;
END;

解释如下:

     对于test表,创建test_haa触发器,当pwd字段发生改变时,更新date字段记录pwd的更新时间。

            如果不加     (OLD.pwd IS NULL && new.pwd IS NOT NULL) 这一个条件,则在pwd为空到pwd不为空这一个更新,date是不记录的。

            如果不加     ((OLD.pwd != new.pwd)) 这一个条件,则在pwd不为空时更新,date是不记录的。

测试:

先插入一条数据:

insert INTO test(id,name) VALUES(1,'test');

当更新pwd字段时:

update test set pwd="test1" where id=1;

date自动更新。

这种触发器,对于mysql来说(5.5.40),一个表只能创建一个。

第二种情况:

表结构:

结合test表:

新建test1表:

CREATE TABLE `test1` (
`tid` int(11) NOT NULL,
`user` varchar(255) DEFAULT NULL,
`idtest` varchar(255) DEFAULT NULL,
PRIMARY KEY (`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

创建触发器:

CREATE TRIGGER `rel_order` AFTER UPDATE ON `test1` FOR EACH ROW begin
IF((old.user != new.user) or (old.user IS NULL && new.user IS NOT NULL))
THEN
update test
set date=now()
where id = old.idtest;
END IF;
END;

解释如下:

当test1表中的user字段更新时,跟新test表中的date字段。条件是,test1表user更改的那条记录的idtest字段与test的id字段相同,更新id为idtest的那条date记录。

测试如下

先在test1表中,插入一条数据:

INSERT into test1 values(1,"sa","1")

当更新:

UPDATE test1 set user="jdksafdgfg" where tid=1;

触发触发器,实现test表的date字段的更新。

转载于:https://my.oschina.net/viakiba/blog/778794

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通用无线设备对码软件_珞光全新发布国产通用软件无线电平台 :USRP-LW N310!珞光品牌已实现国产替代...

USRP-LW N310是一种网络的软件定义无线电(SDR),它提供了部署大规模的可靠的和容错性的分布式无线系统。USRP-LW N310通过引入远程执行任务的能力简化了对SDR系统的控制和管理,如更新软件,重新启动,工厂复位…

手把手玩转win8开发系列课程(2)

对win8开发,上一节我们对win8进行了简单的介绍,这一节我们来瞧一瞧他的开发环境搭建。 前奏。 这里所讲的win8开发,主要是指Windows8 app store 上开发,及metro ui或叫morden ui 程序的开发。传统桌面应用程序,网站应…

python通过什么来区分不同语句块_Python语言通过

【填空题】小块【填空题】离开;出发(n.)【填空题】好人啊中的 “ 啊 ” 读( )【填空题】“ 洁癖 ” 的正确读音是( )【单选题】The article suggests that when a person ________ under unusual stress he should be especially careful to have a well-balanced diet. (CET20…

【Android面试】Android面试题集锦 (陆续更新)

【Android面试】Android面试题集锦 (陆续更新) 分类: 【杂七杂八】2011-05-11 17:58 2064人阅读 评论(0) 收藏 举报一些常见的Android面试基础题做下总结,看看你能做出多少道? 1. Intent的几种有关Activity启动的方式有哪些,你了解每个含义吗…

cordova-plugin-app-version插件使用

此插件用来获取开发软件的版本号!首先安装此插件: 命令行中输入 cordova plugin add cordova-plugin-app-version然后刷新项目,就会在在项目plugins文件夹下看到cordova-plugin-app-version,如下图所示接下来就是使用此插件的语句获取版本号c…

14.cookie与自动登陆

场景 webdriver可以读取并添加cookie。有时候我们需要验证浏览器中是否存在某个cookie,因为基于真实的cookie的测试是无法通过白盒和集成测试完成的。 另外更加常见的一个场景是自动登陆。有很多系统的登陆信息都是保存在cookie里的,因此只要往cookie中添…

不同串口通信速率超时时间_串口知识详解 串口功能及电路介绍

一、串口的概念串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口(SerialInterface)是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信…

matlab 求最大值函数,利用matlab, 二元函数求最大值

求二元函数z0.2323*x^2-0.2866^22*(-0.5406)*a0^21.0203*a0^2*x^2/((x^2y^2)^0.5*tanh(2*(x^2y^2)^0.5)-x^2*(0.5733-u0)^2)的最大值,变量x和y都是在0.2附近。求z的最大值,以及x,y的取值。先用diff命令求z关于x,y的偏导数得到q(1)和q(2)两个方程&#xf…

代码生成那点事

在微软技术中浸淫6年多了,我就常想啊,有没有一个工具,能让开发简单一点,哪怕就简单一点点?! 这还是去年的事情,手里的项目都成功上线了,我和james聊天,我说咱们的这几个项…

python反爬虫破解_python中绕过反爬虫的方法总结

我们在登山的途中,有不同的路线可以到达终点。因为选择的路线不同,上山的难度也有区别。就像最近几天教大家获取数据的时候,断断续续的讲过header、地址ip等一些的方法。具体的爬取方法相信大家已经掌握住,本篇小编主要是给大家进…

vue上传文件php,php文件上传 – 前端开发,JQUERY特效,全栈开发,vue开发

文件上传一般有下面2种方式:有两种:1、标准input表单方式,典型的用$_FILES进行接收;2、以Base64的方式进行传送,一般是AJAX异步上传。第一种标准的input表单方式,适用于大文件进行上传,同时支持…

HDU 1003 Max Sum

同上题一样&#xff0c;求连续子序列的最大和 而且比上题还要简单一些&#xff0c;用不到long long了 直接水过 1 //#define LOCAL2 #include <iostream>3 #include <cstdio>4 #include <cstring>5 using namespace std;6 7 const int maxn 100000 10;8 in…

linux中如何查看进程占用了哪些端口?

使用netstat –apn | grep <进程名>便可以查看指定进程所占用的端口。转载于:https://www.cnblogs.com/x10322/p/6020485.html

python画端午节_我想带你去旅行,我用Python提前做了一份端午旅游攻略,请收下!...

旅游是调节心情的有效途径&#xff0c;越来越多的上班族和学生期待利用假期时间外出游 玩来开拓眼界、舒缓压力。然而真正有了假期&#xff0c;许多人却会因“去哪玩”的问题倍感困惑&#xff0c;六月份正是出行的好时节&#xff0c;期间还有端午节小长假&#xff0c;就让我们一…

iOS: 在Object-C中监听javascript事件( Javascript communicating back with Objective-C code)

在iOS开发之Objective-C与JavaScript交互操作 中我们可以通过stringByEvaluatingJavaScriptFromString 去实现在obj-C中获取到相关节点属性&#xff0c;添加javascript代码等功能。但是我们如何监听到javascript的响应事件呢。在MAC OS中有效的API去实现&#xff0c;但iPhone没…

ECharts-图表回执组件

测试地址&#xff1a;http://echarts.baidu.com/doc/example.html转载于:https://www.cnblogs.com/HOH/p/3868617.html

matlab r2007课后答案,《MATLAB R2007基础教程》习题答案.doc

打开“图形窗口”&#xff0c;熟悉其中各个菜单和工具的功能和用法参考答案&#xff1a;略编写程序&#xff0c;该程序在同一窗口中绘制函数在 之间的正弦曲线和余弦曲线&#xff0c;步长为 &#xff0c;线宽为 4 个象素&#xff0c;正弦曲线设置为蓝色实线&#xff0c;余弦曲线…

第一本书14单元

14.linux中设备的访问*****1.设备的访问******1.设备识别/dev/xdxn /*硬盘设备/dev/sdal/dev/cdrom /*光驱/dev/mapper/* /*虚拟设备****.设备的发现*****fdish -l /*查看真实存在的设备cat /proc/partition /*系统能够识别的设备blkid /*系统能够挂载使用的设备df /*查看设备被…

夜深了,发点无聊的东西

研究一个东西遇到gcnew这个关键词&#xff0c;mark一下&#xff01;new和gcnew的区别。 C/CLI中使用gcnew关键字表示在托管堆上分配内存&#xff0c;并且为了与以前的指针区分&#xff0c;用^来替换* &#xff0c;就语义上来说他们的区别大致如下: 1. gcnew返回的是一个句…

变速积分pid控制器matlab,变速积分PID控制系统设计.docx

课程设计报告设计题目变速积分PID控制系统设计课程名称计算机控制技术B姓名 苏丹学号 2008100731班级自动化0803 教师闫高伟摘 要错误!未定义书签。Abstract第1章数字PTD及变速积分简介错误!未定义书签。TOC \o "1-5" \h \z 1数字PTD发展介绍1HYPERLINK \l "boo…