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.pswp.cn/news/260229.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260229.shtml
英文地址,請注明出處:http://en.pswp.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…