MySQL 5.0觸發(fā)器參考教程第3/4頁(yè)
更新時(shí)間:2008年09月10日 09:20:36 作者:
需要學(xué)習(xí)mysql觸發(fā)器的朋友需要了解的東西,整理的比較多,建議大家慢慢多練習(xí)
REVOKE CREATE TRIGGER ON <表名稱> FROM <用戶或用戶列表>;
Referring to OLD and NEW columns 關(guān)于舊的和新創(chuàng)建的列的標(biāo)識(shí)
在觸發(fā)器的SQL語(yǔ)句中,你可以關(guān)聯(lián)表中的任意列。但你不能僅使用列的名稱去標(biāo)識(shí),那會(huì)使系統(tǒng)混淆,因?yàn)槟抢锟赡軙?huì)有列的新名(這可能正是你要修改的,你的動(dòng)作可能正是要修改列名),還有列的舊名存在。因此你必須用這樣的語(yǔ)法來(lái)標(biāo)識(shí):
"NEW . column_name"或者"OLD . column_name".這樣在技術(shù)上處理(NEW | OLD . column_name)新和舊的列名屬于創(chuàng)建了過(guò)渡變量("transition variables")。
對(duì)于INSERT語(yǔ)句,只有NEW是合法的;對(duì)于DELETE語(yǔ)句,只有OLD才合法;而UPDATE語(yǔ)句可以在和NEW以及OLD同時(shí)使用。下面是一個(gè)UPDATE中同時(shí)使用NEW和OLD的例子。
CREATE TRIGGER t21_au
BEFORE UPDATE ON t22
FOR EACH ROW
BEGIN
SET @old = OLD . s1;
SET @new = NEW.s1;
END;//
現(xiàn)在如果t21表中的s1列的值是55,那么執(zhí)行了"UPDATE t21 SET s1 = s1 + 1"之后@old的值會(huì)變成55,而@new的值將會(huì)變成56。
Example of CREATE and INSERT CREATE和INSERT的例子
CREATE table with trigger創(chuàng)建有觸發(fā)器的表
這里所有的例程中我都假定大家的分隔符已經(jīng)設(shè)置成//(DELIMITER //)。
CREATE TABLE t22 (s1 INTEGER)//
CREATE TRIGGER t22_bi
BEFORE INSERT ON t22
FOR EACH ROW
BEGIN
SET @x = 'Trigger was activated!';
SET NEW.s1 = 55;
END;//
在最開(kāi)始我創(chuàng)建了一個(gè)名字為t22的表,然后在表t22上創(chuàng)建了一個(gè)觸發(fā)器t22_bi,當(dāng)我們要向表中的行插入時(shí),觸發(fā)器就會(huì)被激活,執(zhí)行將s1列的值改為55的動(dòng)作。
INSERT on table w ith a trigger使用觸發(fā)器執(zhí)行插入動(dòng)作
mysql> INSERT INTO t22 VALUES (1)//
讓我們看如果向表t2中插入一行數(shù)據(jù)觸發(fā)器對(duì)應(yīng)的表會(huì)怎么樣?
這里的插入的動(dòng)作是很常見(jiàn)的,我們不需要觸發(fā)器的權(quán)限來(lái)執(zhí)行它。甚至不需要知道是否有觸發(fā)器關(guān)聯(lián)。
mysql> SELECT @x, t22.* FROM t22//
+------------------------+------+
| @x | s1 |
+------------------------+------+
| Trigger was activated! | 55 |
+------------------------+------+
1 row in set (0.00 sec)
大家可以看到INSERT動(dòng)作之后的結(jié)果,和我們預(yù)期的一樣,x標(biāo)記被改動(dòng)了,同時(shí)這里插入的數(shù)據(jù)不是我們開(kāi)始輸入的插入數(shù)據(jù),而是觸發(fā)器自己的數(shù)據(jù)。
Example of a "check" constraint
"check"完整性約束例子
What's a "check" constraint 什么是"check"約束
在標(biāo)準(zhǔn)的SQL語(yǔ)言中,我們可以在(CREATE TABLE)創(chuàng)建表的過(guò)程中使用"CHECK (condition)",
您可能感興趣的文章:
相關(guān)文章
SQL-?join多表關(guān)聯(lián)問(wèn)題
這篇文章主要介紹了SQL-?join多表關(guān)聯(lián)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-12-12MySQL為什么要避免大事務(wù)以及大事務(wù)解決的方法
這篇文章主要介紹了MySQL為什么要避免大事務(wù)以及大事務(wù)解決的方法,幫助大家更好的理解和學(xué)習(xí)MySQL,感興趣的朋友可以了解下2020-08-08淺談mysql導(dǎo)出表數(shù)據(jù)到excel關(guān)于datetime的格式問(wèn)題
這篇文章主要介紹了淺談mysql導(dǎo)出表數(shù)據(jù)到excel關(guān)于datetime的格式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07設(shè)置MySQLroot賬戶密碼報(bào)錯(cuò)ERROR 1064 (42000): You 
在安裝mysql的時(shí)候,設(shè)置root賬戶密碼出現(xiàn)了ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds..錯(cuò)誤,本文小編給大家介紹了相關(guān)的解決方案,需要的朋友可以參考下2023-12-12SQL結(jié)果如何根據(jù)某個(gè)字段取最新時(shí)間去重
在日常的項(xiàng)目開(kāi)發(fā)當(dāng)中,經(jīng)常會(huì)遇到獲取同一屬性相同的記錄,如何獲取記錄時(shí)間最新的那一條,下面這篇文章主要給大家介紹了關(guān)于SQL結(jié)果如何根據(jù)某個(gè)字段取最新時(shí)間去重的相關(guān)資料,需要的朋友可以參考下2023-06-06MySQL?SQL性能分析之慢查詢?nèi)罩?、explain使用詳解
這篇文章主要介紹了MySQL?SQL性能分析?慢查詢?nèi)罩?、explain使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04