TRIGGER:Mysql觸發器

來源:互聯網
上載者:User

1. TRIGGER簡介
trigger是mysql的觸發器,當建立觸發器時,會監控特定的事件,當觸發時會啟用物件,處理trigger_stmt,即要執行的語句。比如表的新增一條記錄時,你需要更新記錄的值得總和,則可以用trigger來實現。
2. Trigger建立語句

CREATE TRIGGER trigger_name trigger_time trigger_event    ON tbl_name FOR EACH ROW trigger_stmt
    trigger_name:為觸發器名稱
    trigger_time: 觸發器啟用時間,為BEFORE或AFTER, 表明在表資料處理之前或之後
    trigger_event: 觸發啟用的類型:下面三種
        INSERT:將新行插入表時啟用觸發程式,例如,通過INSERT、LOAD DATA和REPLACE語句。
        UPDATE:更改某一行時啟用觸發程式,例如,通過UPDATE語句。
        DELETE:從表中刪除某一行時啟用觸發程式,例如,通過DELETE和REPLACE語句。
    tbl_name : 動作表名稱
    trigger_stmt: 觸發器要操作的語句

3. 使用限制
1)同一個表不能有同一種觸發器:
    例如,對於某一表,不能有兩個BEFORE UPDATE觸發程式。但可以有1個BEFORE UPDATE觸發程式和1個BEFORE INSERT觸發程式,或1個BEFORE UPDATE觸發程式和1個AFTER UPDATE觸發程式。
2)必須是永久表,不能是TEMPORARY表或視圖。

4. trigger使用
建立表和觸發器
 CREATE TABLE account (acct_num INT, amount DECIMAL(10,2)); CREATE TRIGGER ins_sum BEFORE INSERT ON account     FOR EACH ROW SET @sum = @sum + NEW.amount;
NEW關鍵詞為操作後的新值。OLD表示操作之前的值。插入三行記錄,讀取@sum的值
mysql> SET @sum = 0;mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);mysql> SELECT @sum AS 'Total amount inserted';
返回值為 @sum的值是14.98 + 1937.50 – 100 = 1852.48。
對於觸發程式是多行,使用BEGIN ... END結構
mysql> delimiter //mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account    -> FOR EACH ROW    -> BEGIN    ->     IF NEW.amount < 0 THEN    ->         SET NEW.amount = 0;    ->     ELSEIF NEW.amount > 100 THEN    ->         SET NEW.amount = 100;    ->     END IF;    -> END;//mysql> delimiter ;
更新一條記錄,查看值:
update account set acct_num = 241 where acct_num=141;  
由於上面的update觸發了trigger,會使 amount的值設定為100.
5. 查看已經建立的trigger
show triggers
還可以在information_schema資料庫的 triggers表中查看。
6. 刪除觸發器
drop trigger test.ins_sum;
test為資料庫名,ins_sum為觸發器名稱
7. 對失敗的處理


·         如果BEFORE觸發程式失敗,不執行相應行上的操作。

·         僅當BEFORE觸發程式(如果有的話)和行操作均已成功執行,才執行AFTER觸發程式。
·         如果在BEFORE或AFTER觸發程式的執行過程中出現錯誤,將導致調用觸發程式的整個語句的失敗。

·         對於事務性表,如果觸發程式失敗(以及由此導致的整個語句的失敗),該語句所執行的所有更改將復原。對於非事務性表,不能執行這類復原,因而,即使語句失敗,失敗之前所作的任何更改依然有效。


地址:http://blog.csdn.net/yonggang7/article/details/24552817



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.