mysql觸發器l安全嗎 Mysql觸發器

2021-10-17 12:14:16 字數 3087 閱讀 3742

觸發器是一種特殊的儲存過程,它在插入、刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。

(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時候舊資料...