觸發器可以在執行語句前或執行後觸發其他 sql **執行。觸發器可以讀取觸發語句改變了哪些資料,但是沒有返回值。因此可以使用觸發器加強業務邏輯的約束而不需要在應用程式寫對應的**。
從上述描述可以看到,觸發器可以簡化應用程式的邏輯並且可以提公升效能,這是因為使用觸發器減少了應用程式和服務端的互動次數。同時,觸發器有助於完成自動更新歸一化和統計資料。例如,我們可以使用觸發器自動統計交易訂單總金額,訂單數及平均客單價。 然而,mysql 的觸發器的應用場合也十分有限,如果你使用過其他資料庫產品的觸發器,不要以為 mysql 也能實現相同的功能,例如:
create trigger 觸發器名 before|after 觸發事件
on 表名 for each row
begin
執行語句列表;
end執行語句列表支援單條或多條語句,下面是乙個多條語句的示例:
delimiter $$
create trigger user_create_log after insert on t_users for each row
begin
declare log_info varchar(40)character set utf8;
declare description varchar(20) character set utf8;#後面發現中文字元編碼出現亂碼,這裡設定字符集
set description = " is created";
set log_info = concat(new.user_name, description); #函式concat可以將字串連線
insert into logs(log) values(log_info);
end $$
delimiter ;
大多數限制中,最大的限制是 for each row 的設計,這有時候導致觸發器沒法用於維護統計和快取表,這是因為這可能很慢。使用觸發器的主要理由是相比定時同步更新,觸發器可以一致保持資料的一致性。 觸發器也沒法保證原子性。例如,更新 myisam 資料表的觸發器在源 sql 語句出錯後,無法回滾。而且,觸發器自身也可能都只錯誤。如果我們使用了 after update 基於 myisam 資料表去更新另乙個表。如果觸發器有個導致第二張表操作失敗的錯誤,那對於第一張表的操作不會回滾。
innodb 的觸發器相關的操作,包括源語句都在同乙個事務中程式設計客棧,因此是滿足原子性的。然而,如果使用innodb 的觸發器去與另一張表校驗資料一致性的時候,這個時候如果不小心的話可能導致不正確的結果。例如,假設需要使用觸發器模擬外來鍵,可以使用 before insert觸發器驗證另一張表qfdgllklec是否存在對應的記錄,但是如果在觸發器讀取另一張表資料的時候不使用 select for update的qfdgllklec話,則由於併發性性問題可能導致錯誤的結果。 雖然觸發器有些缺陷,但是這並程式設計客棧不意味著不能用。相反,觸發器本身也是有用的,尤其是對於約束,系統維護任務和保持統計資料保持最新。
也可以使用觸發器記錄資料行的變化。這樣即便是離線手動運算元據庫的記錄(如修復錯誤資料)也能夠被記錄下來。但是,需要注意的是對於往其他自增主鍵表插入資料時要小心,這對於複製性的語句表現會有問題,因為自增值對於兩個相同的副本值並不同。
結語:觸發器在有限的場合能夠發揮其優勢,比如統計資料、資料表變更日誌等。但是也會有一些缺陷,比如大qfdgllklec資料量的更新由於逐行觸發,會降低效率。還有就是,myisam 引擎無法保障原子性。因此,要根據應用場景是否要是有觸發器。
積分觸發器 mysql 觸發器的使用
將多個資料庫中的某列資料同步時需要用到mysql觸發器,以下可做參考,已簡單測試ok.修改紅棗的積分時觸發 drop trigger if exists u hongzaocount delimiter create trigger u hongzaocount after update on ho...
mysql 觸發器 觸發器使用
1 了解什麼是觸發器?mysql 的觸發器和儲存過程一樣,都是嵌入到mysql的一段程式,觸發器 是由事件觸發某個動作,這些事件包括,插入 更新 刪除等語句。如果定義了觸發程式,觸發器就會觸發執行相應的操作。觸發器 trigger 是個特殊的儲存過程,不同的是,執行儲存過程要使用call語句來呼叫,...
觸發器 mysql觸發器
觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...