觸發器是一種特殊的儲存過程,它在插入、刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。
(1).觸發器的作用
1.可在寫入資料表前,強制檢驗或轉換資料。
2.觸發器發生錯誤時,異動的結果會被撤銷。
3.部分資料庫管理系統可以針對資料定義語言(ddl)使用觸發器,稱為ddl觸發器。
4.可依照特定的情況,替換異動的指令 (instead of)。
(2).建立觸發器
建立測試環境
mysql> create database test_db;
query ok, 1 row affected (0.00 sec)
mysql> use test_db;
database changed
mysql> create table user_tb(id int,name varchar(20));
query ok, 0 rows affected (0.03 sec)
mysql> create table job_tb(uid int,job varchar(20));
query ok, 0 rows affected (0.04 sec)
建立觸發器語句如下:
create trigger [觸發器名稱] [before|after] [insert|update|delete] on [表名] for each row
[觸發的動作,乙個update或insert或delete的sql語句;]
[新的結束字元]
before和after是觸發時間,insert、update和delete是監視事件。並且因為包含乙個觸發動作的sql語句,所以也要使用delimiter [新字元]。
例項mysql> delimiter //
mysql> create trigger insert_job after insert on user_tb for each row
-> insert into job_tb values (1,'老師');
query ok, 0 rows affected (0.00 sec)
mysql> insert into user_tb values(1,'張三')//
query ok, 1 row affected (0.00 sec)
mysql> select * from user_tb//
| id | name |
| 1 | 張三 |
1 row in set (0.00 sec)
mysql> select * from job_tb//
| uid | job |
| 1 | 老師 |
1 row in set (0.00 sec)
注意:觸發器與監視表不能是同乙個,否則會報1442的錯誤。
(3).檢視觸發器
show create trigger [觸發器名稱]; 檢視指定觸發器
show triggers; 檢視所有觸發器
mysql> show create trigger insert_job\g //檢視指定觸發器
*************************** 1. row ***************************
trigger: insert_job
sql_mode: only_full_group_by,strict_trans_tables,no_zero_in_date,no_zero_date,error_for_division_by_zero,no_auto_create_user,no_engine_substitution
sql original statement: create definer=`root`@`localhost` trigger insert_job after insert on user_tb for each row
insert into job_tb values (1,'老師')
character_set_client: utf8
collation_connection: utf8_general_ci
database collation: utf8_general_ci
created: 2019-06-13 11:51:28.87
1 row in set (0.00 sec)
mysql> show triggers\g //檢視所有觸發器
*************************** 1. row ***************************
trigger: insert_job
event: insert
table: user_tb
statement: insert into job_tb values (1,'老師')
timing: after
created: 2019-06-13 11:51:28.87
sql_mode: only_full_group_by,strict_trans_tables,no_zero_in_date,no_zero_date,error_for_division_by_zero,no_auto_create_user,no_engine_substitution
definer: root@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
database collation: utf8_general_ci
1 row in set (0.00 sec)
(4).刪除觸發器
drop trigger [觸發器名稱];
mysql> drop trigger insert_job//
query ok, 0 rows affected (0.00 sec)
mysql> show triggers\g
empty set (0.00 sec)
(5).擴充套件
由於觸發器其實是一種特殊的儲存過程,所以觸發動作其實可以使用begin [sql語句集] end來擴充套件其使用方法,詳見:
mysql觸發器l安全嗎 觸發器 MySQL
1.需求 統計同一所學校的學生人數 2.建表 學生表 student drop table if exists student create table student id int not null auto increment,name varchar 100 age smallint,scho...
觸發器 mysql觸發器
觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...
my sql 觸發器 mysql建立觸發器
首先,我們來了解一下什麼是觸發器,觸發器,就是在對一張表資料進行增 insert 刪 delete 改 update 的時候,為了保持資料的一致性,對別的表也要進行相應的資料修改。我們都知道mysql最後事務提交後,資料是會儲存到磁碟上的,那麼每次在insert,delete,update時候舊資料...