程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL 觸發器

MySQL 觸發器

編輯:關於MYSQL數據庫
Conventions and Styles約定和編程風格
每次我想要演示實際代碼時,我會對MySQL客戶端的屏幕就出現的代碼進行調整,將字體改成CourIEr,使他們看起來與普通文本不一樣(讓大家區別程序代碼和正文)。在這裡舉個例子:

MySQL> DROP FUNCTION f;
Query OK, 0 rows affected (0.00 sec)

如果實例比較大,則需要在某些行和段落間加注釋,同時我會用將"<--"符號放在頁面的右邊以表示強調。例如:

MySQL> CREATE PROCEDURE p ()
-> BEGIN
-> /* This procedure does nothing */ <--
-> END;//
Query OK, 0 rows affected (0.00 sec)

有時候我會將例子中的"mysql>"和"->"這些系統顯示去掉,你可以直接將代碼復制到mysql客戶端程序中(如果你現在所讀的不是電子版的,可以在MySQL.com網站下載相關腳本)

所以的例子都已經在Suse 9.2 Linux、Mysql 5.0.3公共版上測試通過。在您閱讀本書的時候,MySQL已經有更高的版本,同時能支持更多OS了,包括Windows,Sparc,HP-UX。因此這裡的
例子將能正常的運行在您的電腦上。但如果運行仍然出現故障,可以咨詢你認識的資深MySQL用戶,這樣就能得到比較好的支持和幫助。轉載請注明翻譯者陳朋奕及轉自:www.PHPv.Net


Why Triggers 為什麼要用觸發器

我們在MySQL 5.0中包含對觸發器的支持是由於以下原因:

MySQL早期版本的用戶長期有需要觸發器的要求。
我們曾經許諾支持所有ANSI標准的特性。
您可以使用它來檢查或預防壞的數據進入數據庫。
您可以改變或者取消INSERT, UPDATE以及DELETE語句。
您可以在一個會話中監視數據改變的動作。

在這裡我假定大家都讀過"MySQL新特性"叢書的第一集--"MySQL存儲過程",那麼大家都應該知道MySQL至此存儲過程和函數,那是很重要的知識,因為在觸發器中你可以使用在函數中使用的語句。特別舉個例子:

復合語句(BEGIN / END)是合法的.轉載請注明翻譯者陳朋奕及轉自:www.PHPv.Net

流控制(Flow-of-control)語句(IF, CASE, WHILE, LOOP, WHILE, REPEAT, LEAVE,ITERATE)也是合法的.
變量聲明(DECLARE)以及指派(SET)是合法的.
允許條件聲明.
異常處理聲明也是允許的.

但是在這裡要記住函數有受限條件:不能在函數中訪問表.因此在函數中使用以下語句是非法的。

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

在觸發器中也有完全一樣的限制.

觸發器相對而言比較新,因此會有(bugs)缺陷.所以我在這裡給大家警告,就像我在存儲過程書中所說那樣.不要在含有重要數據的數據庫中使用這個觸發器,如果需要的話在一些以測試為目的的數據庫上使用,同時在你對表創建觸發器時確認這些數據庫是默認的。

Syntax 語法
1. Syntax: Name 語法:命名規則轉載請注明翻譯者陳朋奕及轉自:www.PHPv.Net


CREATE TRIGGER <觸發器名稱> <--
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON <表名稱>
FOR EACH ROW
<觸發器SQL語句>

觸發器必須有名字,最多64個字符,可能後面會附有分隔符.它和MySQL中其他對象的命名方式基本相象.

這裡我有個習慣:就是用表的名字+’_’+觸發器類型的縮寫.因此如果是表t26,觸發器是在事件UPDATE(參考下面的點(2)和(3))之前(BEFORE)的,那麼它的名字就是t26_bu。

2. Syntax: Time 語法:觸發時間

CREATE TRIGGER <觸發器名稱>
{ BEFORE | AFTER } <--
{ INSERT | UPDATE | DELETE }


ON <表名稱>
FOR EACH ROW
<觸發的SQL語句>

觸發器有執行的時間設置:可以設置為事件發生前或後。

本新聞共3頁,當前在第11 2 3


<
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved