第二十四章--使用觸發器
1.觸發器:是MySQL響應如下任意語句而自動執行的一條MySQL語句(或位於BEGIN和END語句之間的一組語句):insert, update, delete.
2.建立觸發器:
(1)惟一的觸發器名;
(2)觸發器關聯的表;
(3)觸發器應該響應的活動(DELETE、INSERT或UPDATE);
(4)觸發器什麼時候執行(處理以前或以後)。數據庫
3.保持每一個數據庫的觸發器名惟一
4.觸發器用CREATE TRIGGER語句建立
例如: create trigger newproduct after insert on products for each row select 'Prodcut added';
5.僅支持表: 只有表才支持觸發器,視圖不支持
6.每一個表最多支持6個觸發器, 單一觸發器不能與多個事件或多個表關聯。
7.觸發器失敗: 若是BEFORE觸發器失敗,則MySQL將不執行請求的操做。此外,若是BEFORE觸發器或語句自己失敗,MySQL 將不執行AFTER觸發器(若是有的話)。
8.刪除觸發器:可以使用DROP TRIGGER語句 drop trigger newproduct;
9.觸發器不能更新或覆蓋。爲了修改一個觸發器,必須先刪除它, 而後再從新建立。
10. insert 觸發器:
(1)在INSERT觸發器代碼內,可引用一個名爲NEW的虛擬表,訪問被 插入的行;
(2)在BEFORE INSERT觸發器中,NEW中的值也能夠被更新(容許更改 被插入的值);
(3)對於AUTO_INCREMENT列,NEW在INSERT執行以前包含0,在INSERT 執行以後包含新的自動生成值。
11.BEFORE或AFTER? 一般,將BEFORE用於數據驗證和淨化(目的是保證插入表中的數據確實是須要的數據)。本提示也適用於UPDATE觸發器。
12.DELETE觸發器:
(1)在DELETE觸發器代碼內,你能夠引用一個名爲OLD的虛擬表,訪問被刪除的行;
(2)OLD中的值全都是隻讀的,不能更新。
例如:
create trigger deleteorder before delete on orders
for each row
begin
insert into archive_orders(order_num, order_date, cust_id)
values (old.order_num, old.order_date, old.cust_id);
end;
解釋:在任意訂單被刪除前將執行此觸發器。它使用一條INSERT語句將OLD中的值(要被刪除的訂單)保存到一個名爲archive_ orders的存檔表中。
13.多語句觸發器:使用BEGIN END塊的好處是觸發器能容納多條SQL語句.
14.UPDATE觸發器
(1)在UPDATE觸發器代碼中,你能夠引用一個名爲OLD的虛擬表訪問 之前(UPDATE語句前)的值,引用一個名爲NEW的虛擬表訪問新 更新的值;
(2)在BEFORE UPDATE觸發器中,NEW中的值可能也被更新(容許更改 將要用於UPDATE語句中的值);
(3)OLD中的值全都是隻讀的,不能更新
例如:
create trigger updateorder before update on vendors
for each row set NEW.vend_state = Upper(NEW.vend_state);
15.觸發器的補充
(1)與其餘DBMS相比,MySQL 5中支持的觸發器至關初級。將來的 MySQL版本中有一些改進和加強觸發器支持的計劃。
(2)建立觸發器可能須要特殊的安全訪問權限,可是,觸發器的執行 是自動的。若是INSERT、UPDATE或DELETE語句可以執行,則相關 的觸發器也能執行。
(3)應該用觸發器來保證數據的一致性(大小寫、格式等)。在觸發器 中執行這種類型的處理的優勢是它老是進行這種處理,並且是透 明地進行,與客戶機應用無關。
(4)觸發器的一種很是有意義的使用是建立審計跟蹤。使用觸發器, 把更改(若是須要,甚至還有以前和以後的狀態)記錄到另外一個 表很是容易。
(5)遺憾的是,MySQL觸發器中不支持CALL語句。這表示不能從觸發 器內調用存儲過程。所需的存儲過程代碼須要複製到觸發器內。
第二十六章--事務處理
1.事務處理(transaction processing)能夠用來維護數據庫的完整性,它保證成批的MySQL操做要麼徹底執行,要麼徹底不執行。
2.事務(transaction)指一組SQL語句;
3.回退(rollback)指撤銷指定SQL語句的過程;
4.提交(commit)指將未存儲的SQL語句結果寫入數據庫表;
5.保留點(savepoint)指事務處理中設置的臨時佔位符(place-holder),你能夠對它發佈回退(與回退整個事務處理不一樣)。
6.使用start transaction 標記事務開始;
7.使用ROLLBACK:回退MySQL語句
例如: select * from ordertotals;
start transaction;
delete from ordertotals;
select * from ordertotals;
rollback;
select * from ordertotals;
8.事務處理用來管理INSERT、UPDATE和 DELETE語句。數據能夠變動的,查詢不用。
9.使用COMMIT
例如:start transaction;
delete from orderitems where order_num=2010;
delete from order where order_num=2010;
commit;
若是第一條DELETE起做用,但第二條失敗,則DELETE不會提交
10.隱含事務關閉: 當COMMIT或ROLLBACK語句執行後,事務會自動關閉.
11.使用保留點
savepoint delete1;
每一個保留點都取標識它的惟一名字,以便在回退時,MySQL知道要回退到何處。爲了回退到本例給出的保留點,可以下進行:
rollback to delete1;
保留點越多越好
12.釋放保留點: 保留點在事務處理完成(執行一條ROLLBACK或 COMMIT)後自動釋放
13.更改默認的提交行爲: set autocommint=0;
14.標誌爲鏈接專用:autocommit標誌是針對每一個鏈接而不是服務器的。安全