MySQL 5.0觸發(fā)器參考教程第1/4頁(yè)
更新時(shí)間:2008年09月10日 09:20:36 作者:
需要學(xué)習(xí)mysql觸發(fā)器的朋友需要了解的東西,整理的比較多,建議大家慢慢多練習(xí)
Conventions and Styles約定和編程風(fēng)格
每次我想要演示實(shí)際代碼時(shí),我會(huì)對(duì)mysql客戶端的屏幕就出現(xiàn)的代碼進(jìn)行調(diào)整,將字體改成Courier,使他們看起來(lái)與普通文本不一樣(讓大家區(qū)別程序代碼和正文)。在這里舉個(gè)例子:
mysql> DROP FUNCTION f;
Query OK, 0 rows affected (0.00 sec)
如果實(shí)例比較大,則需要在某些行和段落間加注釋,同時(shí)我會(huì)用將"<--"符號(hào)放在頁(yè)面的右邊以表示強(qiáng)調(diào)。例如:
mysql> CREATE PROCEDURE p ()
-> BEGIN
-> /* This procedure does nothing */ <--
-> END;//
Query OK, 0 rows affected (0.00 sec)
有時(shí)候我會(huì)將例子中的"mysql>"和"->"這些系統(tǒng)顯示去掉,你可以直接將代碼復(fù)制到mysql客戶端程序中(如果你現(xiàn)在所讀的不是電子版的,可以在mysql.com網(wǎng)站下載相關(guān)腳本)
所以的例子都已經(jīng)在Suse 9.2 Linux、Mysql 5.0.3公共版上測(cè)試通過(guò)。在您閱讀本書的時(shí)候,Mysql已經(jīng)有更高的版本,同時(shí)能支持更多OS了,包括Windows,Sparc,HP-UX。因此這里的例子將能正常的運(yùn)行在您的電腦上。但如果運(yùn)行仍然出現(xiàn)故障,可以咨詢你認(rèn)識(shí)的資深Mysql用戶,這樣就能得到比較好的支持和幫助。
Why Triggers 為什么要用觸發(fā)器
我們?cè)贛ySQL 5.0中包含對(duì)觸發(fā)器的支持是由于以下原因:
MySQL早期版本的用戶長(zhǎng)期有需要觸發(fā)器的要求。
我們?cè)?jīng)許諾支持所有ANSI標(biāo)準(zhǔn)的特性。
您可以使用它來(lái)檢查或預(yù)防壞的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)。
您可以改變或者取消INSERT, UPDATE以及DELETE語(yǔ)句。
您可以在一個(gè)會(huì)話中監(jiān)視數(shù)據(jù)改變的動(dòng)作。
在這里我假定大家都讀過(guò)"MySQL新特性"叢書的第一集--"MySQL存儲(chǔ)過(guò)程",那么大家都應(yīng)該知道MySQL至此存儲(chǔ)過(guò)程和函數(shù),那是很重要的知識(shí),因?yàn)樵谟|發(fā)器中你可以使用在函數(shù)中使用的語(yǔ)句。特別舉個(gè)例子:
復(fù)合語(yǔ)句(BEGIN / END)是合法的.
流控制(Flow-of-control)語(yǔ)句(IF, CASE, WHILE, LOOP, WHILE, REPEAT, LEAVE,ITERATE)也是合法的.
變量聲明(DECLARE)以及指派(SET)是合法的.
允許條件聲明.
異常處理聲明也是允許的.
但是在這里要記住函數(shù)有受限條件:不能在函數(shù)中訪問(wèn)表.因此在函數(shù)中使用以下語(yǔ)句是非法的。
ALTER 'CACHE INDEX' CALL COMMIT CREATE DELETE
DROP 'FLUSH PRIVILEGES' GRANT INSERT KILL
LOCK OPTIMIZE REPAIR REPLACE REVOKE
ROLLBACK SAVEPOINT 'SELECT FROM table'
'SET system variable' 'SET TRANSACTION'
SHOW 'START TRANSACTION' TRUNCATE UPDATE
在觸發(fā)器中也有完全一樣的限制.
觸發(fā)器相對(duì)而言比較新,因此會(huì)有(bugs)缺陷.所以我在這里給大家警告,就像我在存儲(chǔ)過(guò)程書中所說(shuō)那樣.不要在含有重要數(shù)據(jù)的數(shù)據(jù)庫(kù)中使用這個(gè)觸發(fā)器,如果需要的話在一些以測(cè)試為目的的數(shù)據(jù)庫(kù)上使用,同時(shí)在你對(duì)表創(chuàng)建觸發(fā)器時(shí)確認(rèn)這些數(shù)據(jù)庫(kù)是默認(rèn)的。
每次我想要演示實(shí)際代碼時(shí),我會(huì)對(duì)mysql客戶端的屏幕就出現(xiàn)的代碼進(jìn)行調(diào)整,將字體改成Courier,使他們看起來(lái)與普通文本不一樣(讓大家區(qū)別程序代碼和正文)。在這里舉個(gè)例子:
mysql> DROP FUNCTION f;
Query OK, 0 rows affected (0.00 sec)
如果實(shí)例比較大,則需要在某些行和段落間加注釋,同時(shí)我會(huì)用將"<--"符號(hào)放在頁(yè)面的右邊以表示強(qiáng)調(diào)。例如:
mysql> CREATE PROCEDURE p ()
-> BEGIN
-> /* This procedure does nothing */ <--
-> END;//
Query OK, 0 rows affected (0.00 sec)
有時(shí)候我會(huì)將例子中的"mysql>"和"->"這些系統(tǒng)顯示去掉,你可以直接將代碼復(fù)制到mysql客戶端程序中(如果你現(xiàn)在所讀的不是電子版的,可以在mysql.com網(wǎng)站下載相關(guān)腳本)
所以的例子都已經(jīng)在Suse 9.2 Linux、Mysql 5.0.3公共版上測(cè)試通過(guò)。在您閱讀本書的時(shí)候,Mysql已經(jīng)有更高的版本,同時(shí)能支持更多OS了,包括Windows,Sparc,HP-UX。因此這里的例子將能正常的運(yùn)行在您的電腦上。但如果運(yùn)行仍然出現(xiàn)故障,可以咨詢你認(rèn)識(shí)的資深Mysql用戶,這樣就能得到比較好的支持和幫助。
Why Triggers 為什么要用觸發(fā)器
我們?cè)贛ySQL 5.0中包含對(duì)觸發(fā)器的支持是由于以下原因:
MySQL早期版本的用戶長(zhǎng)期有需要觸發(fā)器的要求。
我們?cè)?jīng)許諾支持所有ANSI標(biāo)準(zhǔn)的特性。
您可以使用它來(lái)檢查或預(yù)防壞的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)。
您可以改變或者取消INSERT, UPDATE以及DELETE語(yǔ)句。
您可以在一個(gè)會(huì)話中監(jiān)視數(shù)據(jù)改變的動(dòng)作。
在這里我假定大家都讀過(guò)"MySQL新特性"叢書的第一集--"MySQL存儲(chǔ)過(guò)程",那么大家都應(yīng)該知道MySQL至此存儲(chǔ)過(guò)程和函數(shù),那是很重要的知識(shí),因?yàn)樵谟|發(fā)器中你可以使用在函數(shù)中使用的語(yǔ)句。特別舉個(gè)例子:
復(fù)合語(yǔ)句(BEGIN / END)是合法的.
流控制(Flow-of-control)語(yǔ)句(IF, CASE, WHILE, LOOP, WHILE, REPEAT, LEAVE,ITERATE)也是合法的.
變量聲明(DECLARE)以及指派(SET)是合法的.
允許條件聲明.
異常處理聲明也是允許的.
但是在這里要記住函數(shù)有受限條件:不能在函數(shù)中訪問(wèn)表.因此在函數(shù)中使用以下語(yǔ)句是非法的。
ALTER 'CACHE INDEX' CALL COMMIT CREATE DELETE
DROP 'FLUSH PRIVILEGES' GRANT INSERT KILL
LOCK OPTIMIZE REPAIR REPLACE REVOKE
ROLLBACK SAVEPOINT 'SELECT FROM table'
'SET system variable' 'SET TRANSACTION'
SHOW 'START TRANSACTION' TRUNCATE UPDATE
在觸發(fā)器中也有完全一樣的限制.
觸發(fā)器相對(duì)而言比較新,因此會(huì)有(bugs)缺陷.所以我在這里給大家警告,就像我在存儲(chǔ)過(guò)程書中所說(shuō)那樣.不要在含有重要數(shù)據(jù)的數(shù)據(jù)庫(kù)中使用這個(gè)觸發(fā)器,如果需要的話在一些以測(cè)試為目的的數(shù)據(jù)庫(kù)上使用,同時(shí)在你對(duì)表創(chuàng)建觸發(fā)器時(shí)確認(rèn)這些數(shù)據(jù)庫(kù)是默認(rèn)的。
相關(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)目開發(fā)當(dāng)中,經(jīng)常會(huì)遇到獲取同一屬性相同的記錄,如何獲取記錄時(shí)間最新的那一條,下面這篇文章主要給大家介紹了關(guān)于SQL結(jié)果如何根據(jù)某個(gè)字段取最新時(shí)間去重的相關(guān)資料,需要的朋友可以參考下2023-06-06MySQL?SQL性能分析之慢查詢?nèi)罩尽xplain使用詳解
這篇文章主要介紹了MySQL?SQL性能分析?慢查詢?nèi)罩?、explain使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04