數據庫觸發器有下面的作用:
成都創新互聯于2013年開始,先為寶清等服務建站,寶清等地企業,進行企業商務咨詢服務。為寶清企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
1.安全性。能夠基于數據庫的值使用戶具有操作數據庫的某種權利。
# 能夠基于時間限制用戶的操作,比如不同意下班后和節假日改動數據庫數據。
2.審計。能夠跟蹤用戶對數據庫的操作。???
# 審計用戶操作數據庫的語句。
# 把用戶對數據庫的更新寫入審計表。
3.實現復雜的數據完整性規則
# 實現非標準的數據完整性檢查和約束。觸發器可產生比規則更為復雜的限制。與規則不同,觸發器能夠引用列或數據庫對象。比如,觸發器可回退不論什么企圖吃進超過自己保證金的期貨。
# 提供可變的缺省值。
4.實現復雜的非標準的數據庫相關完整性規則。觸發器能夠對數據庫中相關的表進行連環更新。比如,在auths表author_code列上的刪除觸發器可導致對應刪除在其他表中的與之匹配的行。
# 在改動或刪除時級聯改動或刪除其他表中的與之匹配的行。
# 在改動或刪除時把其他表中的與之匹配的行設成NULL值。
# 在改動或刪除時把其他表中的與之匹配的行級聯設成缺省值。
# 觸發器可以拒絕或回退那些破壞相關完整性的變化,取消試圖進行數據更新的事務。當插入一個與其主健不匹配的外部鍵時,這樣的觸發器會起作用。比如,可以在books.author_code?列上生成一個插入觸發器,假設新值與auths.author_code列中的某值不匹配時,插入被回退。
5.同步實時地復制表中的數據。
6.自己主動計算數據值,假設數據的值達到了一定的要求,則進行特定的處理
語法如下:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
觸發程序是與表有關的命名數據庫對象,當表上出現特定事件時,將激活該對象。
觸發程序與命名為tbl_name的表相關。tbl_name必須引用永久性表。不能將觸發程序與臨時表表或視圖關聯起來。
trigger_time是觸發程序的動作時間。它可以是BEFORE或AFTER,以指明觸發程序是在激活它的語句之前或之后觸發。
trigger_event指明了激活觸發程序的語句的類型。trigger_event可以是下述值之一:
· INSERT:將新行插入表時激活觸發程序,例如,通過INSERT、LOAD DATA和REPLACE語句
mysql用觸發器禁止某條記錄的刪除、修改:
delimiter //
CREATE TRIGGER xx_company_agent_update? BEFORE UPDATE ON xx_company_agent
FOR EACH ROW
BEGIN
IF OLD.bank_card is not null THEN
SET NEW.bank_card = OLD.bank_card,NEW.money= OLD.money,NEW.real_money=OLD.real_money,NEW.bank_name=OLD.bank_name;
END IF;
END;//
delimiter ;
擴展資料
mysql觸發器的使用
用戶記錄用戶的預期事件(schema是特殊用戶的數據庫對象集合。這些對象包括:表,索引,視圖,存儲程序等。在Oracle里, schema要求創建一個用戶。但是也可以創建一個沒有schema的用戶(根本沒有對象)。
所以在Oracle-中,用戶就是一個帳戶而schema就是對象。可能在其他的數據庫平臺上可以創建一個沒有用戶的schema。LOGOFF不能是AFTER LOGOFF,將會重新操作,這里應該是BEFORE,否則就會報錯:替換可以插入不能有AFTER。創建或替換觸發器MYLOGOFFTRIGGER。
參考資料來源:百度百科—mySQL
語法說明如下。
1) 觸發器名
觸發器的名稱,觸發器在當前數據庫中必須具有唯一的名稱。如果要在某個特定數據庫中創建,名稱前面應該加上數據庫的名稱。
2) INSERT | UPDATE | DELETE
觸發事件,用于指定激活觸發器的語句的種類。
注意:三種觸發器的執行時間如下。INSERT:將新行插入表時激活觸發器。例如,INSERT 的 BEFORE 觸發器不僅能被 MySQL 的 INSERT 語句激活,也能被 LOAD DATA 語句激活。DELETE: 從表中刪除某一行數據時激活觸發器,例如 DELETE 和 REPLACE 語句。UPDATE:更改表中某一行數據時激活觸發器,例如 UPDATE 語句。
3) BEFORE | AFTER
BEFORE 和 AFTER,觸發器被觸發的時刻,表示觸發器是在激活它的語句之前或之后觸發。若希望驗證新數據是否滿足條件,則使用 BEFORE 選項;若希望在激活觸發器的語句執行之后完成幾個或更多的改變,則通常使用 AFTER 選項。
4) 表名
與觸發器相關聯的表名,此表必須是永久性表,不能將觸發器與臨時表或視圖關聯起來。在該表上觸發事件發生時才會激活觸發器。同一個表不能擁有兩個具有相同觸發時刻和事件的觸發器。例如,對于一張數據表,不能同時有兩個 BEFORE UPDATE 觸發器,但可以有一個 BEFORE UPDATE 觸發器和一個 BEFORE INSERT 觸發器,或一個 BEFORE UPDATE 觸發器和一個 AFTER UPDATE 觸發器。
5) 觸發器主體
觸發器動作主體,包含觸發器激活時將要執行的 MySQL 語句。如果要執行多個語句,可使用 BEGIN…END 復合語句結構。
有時候在修改某一個字段的值得時候我們需要根據當前字段的不同狀態進行不同處理,
比如對于用戶表,我們需要記錄下來用戶被訪問的次數,但訪問次數的初始值為 null。
如下:
CREATE TABLE `test` (
`id` ?int(11) NULL DEFAULT NULL ,
`name` ?varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`visit_num` ?int(11) NULL DEFAULT NULL
)
我們就可以使用如下的 sql 進行判斷和修改
UPDATE test set visit_age=if(visit_num is null,1,visit_num+1) where id=1。
1、首先寫建立觸發器的sql語句:
1)插入時的:
CREATE TRIGGER insertref BEFORE INSERT ON a
FOR EACH ROW BEGIN
UPDATE b SET registerStatus =1 WHERE NEW.id = id and NEW.received is not null and NEW.received !='';
update b set registerIP=NEW.received where NEW.id = id;
end
2)刪除時:
CREATE TRIGGER deleteref BEFORE DELETE ON a
FOR EACH ROW begin
update b set registerStatus =0 WHERE OLD.id = id;
update b set registerIP=NULL where OLD.id = id;
end
3)更新時:
CREATE TRIGGER updateref BEFORE UPDATE ON a
FOR EACH ROW BEGIN
update b set registerIP=NEW.received where OLD.id=id;
end
文章標題:mysql中觸發器怎么用,mysql中觸發器的作用
URL網址:http://m.kartarina.com/article4/hdopie.html
成都網站建設公司_創新互聯,為您提供網站制作、電子商務、品牌網站建設、外貿網站建設、營銷型網站建設、軟件開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯