国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

MySQL5觸發(fā)器的實(shí)際操作功能有哪些?

數(shù)據(jù)庫 MySQL
我們今天主要向大家講述的是MySQL5觸發(fā)器,以及對(duì)其為什么一定要使用的原因的介紹,以下就是文章的詳細(xì)內(nèi)容的描述。

此文章主要向大家介紹的是MySQL5觸發(fā)器,每次我演示實(shí)際代碼的時(shí)候會(huì)對(duì)MySQL(和PHP搭配之最佳組合)客戶端的屏幕就出現(xiàn)的代碼進(jìn)行相關(guān)的調(diào)整,主要是將字體改成Courier,使他們看起來與普通文本不一樣(讓大家區(qū)別程序代碼和正文)。

MySQL5觸發(fā)器教程在這里舉個(gè)例子:

 

MySQL(和PHP搭配之最佳組合)> DROP FUNCTION f;Query OK, 0 rows affected (0.00 sec)如果實(shí)例比較大,則需要在某些行和段落間加注釋,同時(shí)我會(huì)用將"<--"符號(hào)放在頁面的右邊以表示強(qiáng)調(diào)。例如:

 

MySQL(和PHP搭配之最佳組合)> CREATE PROCEDURE p ()-> BEGIN-> /* This procedure does nothing */ <---> END;//Query OK, 0 rows affected (0.00 sec)有時(shí)候我會(huì)將例子中的"MySQL(和PHP搭配之最佳組合)>"和"->"這些系統(tǒng)顯示去掉,你可以直接將代碼復(fù)制到MySQL(和PHP搭配之最佳組合)客戶端程序中(如果你現(xiàn)在所讀的不是電子版的,可以在MySQL(和PHP搭配之最佳組合).com網(wǎng)站下載相關(guān)腳本) 所以的例子都已經(jīng)在Suse 9.2 Linux、MySQL(和PHP搭配之最佳組合) 5.0.3公共版上測試通過。

在您閱讀本書的時(shí)候,MySQL(和PHP搭配之最佳組合)已經(jīng)有更高的版本,同時(shí)能支持更多OS了,包括Windows,Sparc,HP-UX。因此這里的例子將能正常的運(yùn)行在您的電腦上。但如果運(yùn)行仍然出現(xiàn)故障,可以咨詢你認(rèn)識(shí)的資深MySQL(和PHP搭配之最佳組合)用戶,這樣就能得到比較好的支持和幫助。

 

為什么要用觸發(fā)器

我們?cè)贛ySQL(和PHP搭配之最佳組合) 5.0中包含對(duì)觸發(fā)器的支持是由于以下原因:

MySQL(和PHP搭配之最佳組合)早期版本的用戶長期有需要觸發(fā)器的要求。我們?cè)?jīng)許諾支持所有ANSI標(biāo)準(zhǔn)的特性。您可以使用它來檢查或預(yù)防壞的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫。您可以改變或者取消INSERT, UPDATE以及DELETE語句。您可以在一個(gè)會(huì)話中監(jiān)視數(shù)據(jù)改變的動(dòng)作。

在這里我假定大家都讀過"MySQL(和PHP搭配之最佳組合)新特性"叢書的第一集--"MySQL(和PHP搭配之最佳組合)存儲(chǔ)過程",那么大家都應(yīng)該知道MySQL(和PHP搭配之最佳組合)至此存儲(chǔ)過程和函數(shù),那是很重要的知識(shí),因?yàn)樵谟|發(fā)器中你可以使用在函數(shù)中使用的語句。特別舉個(gè)例子:

 

復(fù)合語句(BEGIN / END)是合法的.流控制(Flow-of-control)語句(IF, CASE, WHILE, LOOP, WHILE, REPEAT, LEAVE,ITERATE)也是合法的.變量聲明(DECLARE)以及指派(SET)是合法的.允許條件聲明.異常處理聲明也是允許的.但是在這里要記住函數(shù)有受限條件:不能在函數(shù)中訪問表.因此在函數(shù)中使用以下語句是非法的。

  1. ALTER 'CACHE INDEX' CALL COMMIT CREATE DELETEDROP   
  2. 'FLUSH PRIVILEGES' GRANT INSERT KILLLOCK OPTIMIZE REPAIR REPLACE REVOKEROLLBACK   
  3. SAVEPOINT 'SELECT FROM table''SET system variable' 'SET TRANSACTION'SHOW 'START TRANSACTION'  
  4. TRUNCATE UPDATE  

在MySQL5觸發(fā)器中也有完全一樣的限制.觸發(fā)器相對(duì)而言比較新,因此會(huì)有(bugs)缺陷.所以我在這里給大家警告,就像我在存儲(chǔ)過程書中所說那樣.不要在含有重要數(shù)據(jù)的數(shù)據(jù)庫中使用這個(gè)觸發(fā)器,如果需要的話在一些以測試為目的的數(shù)據(jù)庫上使用,同時(shí)在你對(duì)表創(chuàng)建觸發(fā)器時(shí)確認(rèn)這些數(shù)據(jù)庫是默認(rèn)的。

 

語法

1. 語法:命名規(guī)則CREATE TRIGGER <觸發(fā)器名稱> <--{ BEFORE | AFTER }{ INSERT | UPDATE | DELETE }ON <表名稱>FOR EACH ROW<觸發(fā)器SQL語句>觸發(fā)器必須有名字,最多64個(gè)字符,可能后面會(huì)附有分隔符.它和MySQL(和PHP搭配之最佳組合)中其他對(duì)象的命名方式基本相象.

 

這里我有個(gè)習(xí)慣:就是用表的名字+'_'+觸發(fā)器類型的縮寫.因此如果是表t26,觸發(fā)器是在事件UPDATE(參考下面的點(diǎn)(2)和(3))之前(BEFORE)的,那么它的名字就是t26_bu。

2. 語法:

觸發(fā)時(shí)間CREATE TRIGGER <觸發(fā)器名稱>{ BEFORE | AFTER } <--{ INSERT | UPDATE | DELETE }ON <表名稱>FOR EACH ROW<觸發(fā)的SQL語句>觸發(fā)器有執(zhí)行的時(shí)間設(shè)置:可以設(shè)置為事件發(fā)生前或后。

3. 語法:事件CREATE TRIGGER <觸發(fā)器名稱>{ BEFORE | AFTER }{ INSERT | UPDATE | DELETE } <--ON <表名稱>FOR EACH ROW<觸發(fā)的SQL語句>同樣也能設(shè)定觸發(fā)的事件:它們可以在執(zhí)行insert、update或delete的過程中觸發(fā)。

4. 語法:表CREATE TRIGGER <觸發(fā)器名稱>{ BEFORE | AFTER }{ INSERT | UPDATE | DELETE }ON <表名稱> <--FOR EACH ROW<觸發(fā)的SQL語句>觸發(fā)器是屬于某一個(gè)表的:當(dāng)在這個(gè)表上執(zhí)行插入、更新或刪除操作的時(shí)候就導(dǎo)致觸發(fā)器的激活.我們不能給同一張表的同一個(gè)事件安排兩個(gè)觸發(fā)器。

5. 語法:( 步長)觸發(fā)間隔CREATE TRIGGER <觸發(fā)器名稱>{ BEFORE | AFTER }{ INSERT | UPDATE | DELETE }ON <表名稱>FOR EACH ROW <--<觸發(fā)的SQL語句>觸發(fā)器的執(zhí)行間隔:FOR EACH ROW子句通知觸發(fā)器每隔一行執(zhí)行一次動(dòng)作,而不是對(duì)整個(gè)表執(zhí)行一次。

6. 語法:語句CREATE TRIGGER <觸發(fā)器名稱>{ BEFORE | AFTER }{ INSERT | UPDATE | DELETE }ON <表名稱>FOR EACH ROW<觸發(fā)的SQL語句> <--觸發(fā)器包含所要觸發(fā)的SQL語句:這里的語句可以是任何合法的語句,包括復(fù)合語句,但是這里的語句受的限制和函數(shù)的一樣。Privileges權(quán)限你必須擁有相當(dāng)大的權(quán)限才能創(chuàng)建觸發(fā)器(CREATE TRIGGER)。

如果你已經(jīng)是Root用戶,那么就足夠了。這跟SQL的標(biāo)準(zhǔn)有所不同。因此在下一個(gè)版本的MySQL(和PHP搭配之最佳組合)中,你完全有可能看到有一種叫做CREATE TRIGGER的新權(quán)限。然后通過這樣的方法賦予:GRANT CREATE TRIGGER ON <表名稱> TO <用戶或用戶列表>;也可以通過這樣收回權(quán)限:REVOKE CREATE TRIGGER ON <表名稱> FROM <用戶或用戶列表>;關(guān)于舊的和新創(chuàng)建的列的標(biāo)識(shí)

 

在觸發(fā)器的SQL語句中,你可以關(guān)聯(lián)表中的任意列。但你不能僅使用列的名稱去標(biāo)識(shí),那會(huì)使系統(tǒng)混淆,因?yàn)槟抢锟赡軙?huì)有列的新名(這可能正是你要修改的,你的動(dòng)作可能正是要修改列名),還有列的舊名存在。因此你必須用這樣的語法來標(biāo)識(shí): "NEW . column_name"或者"OLD . column_name".這樣在技術(shù)上處理(NEW | OLD . column_name)新和舊的列名屬于創(chuàng)建了過渡變量("transition variables")。

對(duì)于INSERT語句,只有NEW是合法的;對(duì)于DELETE語句,只有OLD才合法;而UPDATE語句可以在和NEW以及OLD同時(shí)使用。下面是一個(gè)UPDATE中同時(shí)使用NEW和OLD的例子。

 

  1. CREATE TRIGGER t21_auBEFORE UPDATE ON t22FOR EACH ROWBEGINSET @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的例子創(chuàng)建有MySQL5觸發(fā)器的表這里所有的例程中我都假定大家的分隔符已經(jīng)設(shè)置成//(DELIMITER //)。

CREATE TABLE t22 (s1 INTEGER)//CREATE TRIGGER t22_biBEFORE INSERT ON t22FOR EACH ROWBEGINSET @x = 'Trigger was activated!';SET NEW.s1 = 55;END;//在最開始我創(chuàng)建了一個(gè)名字為t22的表,然后在表t22上創(chuàng)建了一個(gè)觸發(fā)器t22_bi,當(dāng)我們要向表中的行插入時(shí),觸發(fā)器就會(huì)被激活,執(zhí)行將s1列的值改為55的動(dòng)作。

 

使用觸發(fā)器執(zhí)行插入動(dòng)作

MySQL(和PHP搭配之最佳組合)> INSERT INTO t22 VALUES (1)//

讓我們看如果向表t2中插入一行數(shù)據(jù)觸發(fā)器對(duì)應(yīng)的表會(huì)怎么樣? 這里的插入的動(dòng)作是很常見的,我們不需要觸發(fā)器的權(quán)限來執(zhí)行它。甚至不需要知道是否有觸發(fā)器關(guān)聯(lián)。

 

  1. MySQL(和PHP搭配之最佳組合)> SELECT @x, t22.* FROM t22//+------------------------+------+|   
  2. @x | s1 |+------------------------+------+| Trigger was activated! | 55 |+------------------------+------+  
  3. 1 row in set (0.00 sec)  

大家可以看到INSERT動(dòng)作之后的結(jié)果,和我們預(yù)期的一樣,x標(biāo)記被改動(dòng)了,同時(shí)這里插入的數(shù)據(jù)不是我們開始輸入的插入數(shù)據(jù),而是觸發(fā)器自己的數(shù)據(jù)。

 

"check"完整性約束例子什么是"check"約束在標(biāo)準(zhǔn)的SQL語言中,我們可以在(CREATE TABLE)創(chuàng)建表的過程中使用"CHECK (condition)",例如:CREATE TABLE t25(s1 INT, s2 CHAR(5), Prima(最完善的虛擬主機(jī)管理系統(tǒng))RY KEY (s1),CHECK (LEFT(s2,1)='A'))ENGINE=INNODB;這里CHECK的意思是"當(dāng)s2列的最左邊的字符不是'A'時(shí),insert和update語句都會(huì)非法",MySQL(和PHP搭配之最佳組合)的視圖不支持CHECK,我個(gè)人是很希望它能支持的。

但如果你很需要在表中使用這樣的功能,我建議大家使用觸發(fā)器來實(shí)現(xiàn)。

 

 

  1. CREATE TABLE t25(s1 INT, s2 CHAR(5),  
  2. Prima(最完善的虛擬主機(jī)管理系統(tǒng))RY KEY (s1))ENGINE=INNODB//CREATE TRIGGER t25_biBEFORE I  
  3. NSERT ON t25FOR EACH ROWIF LEFT(NEW.s2,1)<>'A' THEN SET NEW.s1=0; END IF;  
  4. CREATE TRIGGER t25_buBEFORE UPDATE ON t25FOR EACH ROWIF LEFT(NEW.s2,1)<>'A' THEN SET NEW.s1=0; END IF;  

我只需要使用BEFORE INSERT和BEFORE UPDATE語句就行了,刪除了觸發(fā)器不會(huì)對(duì)表有影響,同時(shí)AFTER的觸發(fā)器也不能修改NEW的過程變量(transition variables)。為了激活觸發(fā)器,我執(zhí)行了向表中的行插入s1=0的數(shù)據(jù),之后只要執(zhí)行符合LEFT(s2,1) <> 'A'條件的動(dòng)作都會(huì)失敗:

 

INSERT INTO t25 VALUES (0,'a') /* priming the pump */ //INSERT INTO t25 VALUES (5,'b') /* gets error '23000' */ //Don't Believe The Old MySQL(和PHP搭配之最佳組合) Manual該拋棄舊的MySQL(和PHP搭配之最佳組合)的手冊(cè)了

 

我在這里警告大家不要相信過去的MySQL(和PHP搭配之最佳組合)手冊(cè)中

以上的相關(guān)內(nèi)容就是對(duì)MySQL5觸發(fā)器教程教程的介紹,望你能有所收獲。

【編輯推薦】

  1. MySQL數(shù)據(jù)庫的正確安裝調(diào)試與VC實(shí)現(xiàn)很簡單
  2. 配置MySQL數(shù)據(jù)源在tomcat5中的實(shí)際操作流程
  3. C++庫連接來對(duì)MySQL數(shù)據(jù)庫進(jìn)行正確連接
  4. MySQL5的基礎(chǔ)知識(shí)與常見問題
  5. MySQL查詢優(yōu)化系列之MySQL查詢優(yōu)化器

 

責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2010-05-18 14:35:06

MySQL觸發(fā)器

2010-05-19 11:25:46

MySQL觸發(fā)器

2010-06-28 13:27:33

SQL Server視

2010-06-10 09:54:54

MySQL編碼

2023-06-11 16:09:49

觸發(fā)器MySQL

2010-05-18 17:39:13

MySQL alter

2010-06-12 13:39:33

MySQL操作blob

2010-05-24 15:06:52

MySQL內(nèi)建復(fù)制功能

2010-05-25 16:31:23

MySQL配置

2010-05-26 16:53:21

MySQL show

2010-05-17 11:26:49

MySQL 多級(jí)同步

2010-05-12 13:45:25

Mysql 復(fù)制設(shè)置

2010-05-20 17:40:54

MySQL編碼

2010-05-19 10:37:06

MySQL expla

2010-05-18 10:07:01

MySQL命令

2010-03-12 15:29:19

Pythonexe

2010-05-18 09:40:01

MySQL修改表字段

2010-05-11 09:51:57

MySQL表修改

2010-05-24 17:26:22

MySQL添加授權(quán)

2010-05-20 15:39:14

MySQL支持中文
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美大胆a级| 亚洲国产电影在线观看| av中文字幕亚洲| 国产精品第一视频| 在线看片黄色| 久久xxxx精品视频| 久久久久久噜噜噜久久久精品| 中文字幕日本在线| 国产欧美精品国产国产专区| 国产精品视频一区二区三区经| 精品久久国产一区| 欧美日本韩国一区二区三区视频| 日韩a在线播放| 美洲天堂一区二卡三卡四卡视频 | 一区二区三区 在线观看视| 佐山爱痴汉视频一区二区三区| 国产a精品视频| 日韩国产欧美一区| 亚洲一区二区三区美女| 精品一区二区三区免费毛片| 美乳中文字幕| 台湾佬综合网| 偷窥少妇高潮呻吟av久久免费| 日韩在线看片| 亚洲天堂精品在线观看| 欧美成人精品1314www| 在线观看成年人视频| 成人黄色在线视频| 91老司机在线| 999在线观看精品免费不卡网站| 欧美交受高潮1| 尤蜜粉嫩av国产一区二区三区| 亚洲人免费短视频| 亚洲自拍偷拍网站| 91精品国产沙发| 羞羞视频网站在线观看| 极品av少妇一区二区| 久热精品视频在线免费观看| 精品成人18| 在线观看中文字幕不卡| 亚洲女同志freevdieo| 成人自拍爱视频| 黄色亚洲网站| 久久久国产一区二区| 成人香蕉社区| 国产成人在线视频| 在线欧美三区| 中文字幕日韩精品无码内射| 久久精品一区四区| 午夜黄色在线观看| 亚洲第五色综合网| 日韩精品一区二区三区免费视频| 国产91在线|亚洲| 亚洲成人一二三| 蜜桃av在线| 91av国产在线| 轻点好疼好大好爽视频| 国产精品乱人伦中文| 一区不卡字幕| 亚洲免费在线视频| 老司机2019福利精品视频导航| 国产一区二区三区日韩欧美| 国产欧美一区| 99视频在线免费| 欧美日韩亚洲丝袜制服| 日韩欧洲国产| 日本福利视频在线观看| 欧美四级电影在线观看| 久久不卡国产精品一区二区| 日本成人在线免费视频| 亚洲精品国产拍免费91在线| 国产精品vip| 在线视频资源站| 国产91精品高潮白浆喷水| 懂色av一区二区三区蜜臀| 在线电影福利片| 国产一区二区无遮挡| 亚洲.国产.中文慕字在线| 群体交乱之放荡娇妻一区二区 | 97碰碰视频| 亚洲美女淫视频| 台湾色综合娱乐中文网| 午夜免费高清视频| 66m—66摸成人免费视频| 91小视频免费看| 欧美尿孔扩张虐视频| 香港三级经典全部种子下载| 国产成+人+综合+亚洲欧洲| 狠狠躁天天躁日日躁欧美| 欧美精品久久96人妻无码| 欧洲一区二区av| 欧美三级视频| 欧洲av不卡| 特黄特色特刺激视频免费播放| 91成人理论电影| 日韩成人中文字幕在线观看| 久久久久久麻豆| 国内精品亚洲| 欧美日韩午夜电影网| 一级二级在线观看| 一区二区三区四区五区视频| 久久综合久久八八| 欧美性做爰猛烈叫床潮| 床上的激情91.| 好看不卡的中文字幕| 精品久久在线| 毛片在线播放网址| av高清在线免费观看| 国产美女精品视频免费观看| 亚洲精品美女网站| 亚洲福利国产精品| 日韩国产欧美在线视频| 婷婷国产精品| 在线观看欧美| 99自拍视频在线观看| 97国产视频| 粉嫩av一区二区三区天美传媒 | 男人久久精品| 好男人www社区| 视频一区在线免费观看| 91九色在线视频| 2018国产精品视频| 久久夜色撩人精品| 日韩三级视频在线观看| 精品久久香蕉国产线看观看gif| 丁香六月综合激情| 日本vs亚洲vs韩国一区三区| 亚洲天堂偷拍| 欧美日韩影院| 黄色国产精品| 91精品国产自产拍在线观看蜜| 亚洲影院天堂中文av色| 国产精品传媒| 999久久久精品一区二区| 亚洲热av色在线播放| 国产精品国产亚洲精品| 玖玖玖视频精品| 粉嫩av一区二区| 秋霞影院一区二区三区| 日韩最新在线| 国内精品免费| 最新国产精品视频| 888久久久| 欧美aaaaaa午夜精品| 国产精品一区二区久激情瑜伽| 国产精品99久久久久久久vr| 成人av资源站| 国产精品女上位| 富二代精品短视频| 欧美日韩综合色| 亚洲精品日韩久久久| 久久手机免费视频| 国产91九色视频| 国产综合色一区二区三区| 99精品视频网站| 高清hd写真福利在线播放| 噜噜噜噜噜在线视频| 波多野在线观看| 国产伦精品一区二区三区免费优势 | 国产在线精彩视频| 美女久久精品| 激情久久婷婷| 337p粉嫩大胆噜噜噜噜噜91av| 欧美午夜激情在线| 亚洲人成自拍网站| 91精品国产自产在线老师啪| 亚洲日本无吗高清不卡| 国产91xxx| 蜜臀av在线播放| 欧州一区二区| 国内自拍一区| 国产精品x8x8一区二区| 极品日韩av| 91色porny| 欧美精品一区二区三| 高清视频欧美一级| 天堂va久久久噜噜噜久久va| 免费观影入口看日本视频| 久久精品女人天堂av免费观看| 亚洲欧美偷拍自拍| 国产欧美一区二区精品秋霞影院| 日韩色视频在线观看| 欧美亚洲国产视频| 丰满少妇久久久| free性m.freesex欧美| 久久久久久影院| 国产精品久久久久一区| 在线免费看av不卡| 色综合久久久久久久久五月| 日本在线三级| 欧美久久精品一级c片| 亚洲欧洲国产日本综合| 久久综合九色九九| 国产二区视频在线播放| 91九色国产在线播放| 免费视频一区二区三区在线观看| 欧美日韩亚洲视频| 亚洲自拍高清视频网站| 国产一区二区影视| 国产免费成人|