一、什麼叫觸發器:
當知足必定的條件之後,它會觸發一個動做的執行,trigger
二、觸發器的執行不是由程序調用,也不是由手工啓動,而是由事件來觸發、激活從而實現執行
三、觸發器是由必定的事件來觸發的,對錶的增刪改操做、不包括查詢,查詢是沒有觸發器的
四、生產中通常不經過MySQL中觸發器來實現這功能,是經過Java程序、Python程序代碼來實現觸發器
五、建立觸發器:
CREATE:
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
trigger_body
說明:
trigger_name:觸發器的名稱
trigger_time:{ BEFORE | AFTER },表示在事件以前或以後觸發
trigger_event::{ INSERT |UPDATE | DELETE },觸發的具體事件
tbl_name:該觸發器做用在表名
六、查看觸發器
SHOW TRIGGERS
查詢系統表information_schema.triggers的方式指定查詢條件,查看指定的觸發器信息。
mysql> USE information_schema;
Database changed
mysql> SELECT * FROM triggers WHERE
七、刪除觸發器
DROP TRIGGER trigger_name;
快速的清空表:truncate table student_info
觸發器示例
建立觸發器,在向學生表INSERT數據時,學生數增長,DELETE學生時,學生數減小
MariaDB [hellodb]> use db1
Database changed
MariaDB [db1]> CREATE TABLE student_info (
-> stu_id INT(11) NOT NULL AUTO_INCREMENT,
-> stu_name VARCHAR(255) DEFAULT NULL,
-> PRIMARY KEY (stu_id)
-> );
CREATE TABLE student_count (
student_count INT(11) DEFAULT 0
);
INSERT INTO student_count VALUES(0);Query OK, 0 rows affected (0.11 sec)
MariaDB [db1]> CREATE TABLE student_count (
-> student_count INT(11) DEFAULT 0
-> );
Query OK, 0 rows affected (0.01 sec)
MariaDB [db1]> INSERT INTO student_count VALUES(0);
Query OK, 1 row affected (0.01 sec)
MariaDB [db1]> select * from student_info;
Empty set (0.00 sec)
建立增長和減小學生數量的觸發器
MariaDB [db1]> CREATE TRIGGER trigger_student_count_insert
-> AFTER INSERT
-> ON student_info FOR EACH ROW
-> UPDATE student_count SET student_count=student_count+1;
Query OK, 0 rows affected (0.00 sec)
MariaDB [db1]> CREATE TRIGGER trigger_student_count_delete
-> AFTER DELETE
-> ON student_info FOR EACH ROW
-> UPDATE student_count SET student_count=student_count-1;
Query OK, 0 rows affected (0.00 sec)
# 查看建立好的觸發器:
MariaDB [db1]> show triggers\G
*************************** 1. row ***************************
Trigger: trigger_student_count_insert
Event: INSERT
Table: student_info
Statement: UPDATE student_count SET student_count=student_count+1
Timing: AFTER
Created: 2018-10-09 20:27:09.78
sql_mode: STRICT_TRANS_TABLES,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
*************************** 2. row ***************************
Trigger: trigger_student_count_delete
Event: DELETE
Table: student_info
Statement: UPDATE student_count SET student_count=student_count-1
Timing: AFTER
Created: 2018-10-09 20:27:27.31
sql_mode: STRICT_TRANS_TABLES,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
2 rows in set (0.00 sec)
查看建好的student_info表,目前是空的
MariaDB [db1]> select * from student_info;
Empty set (0.00 sec)
往裏面插入一條數據;
MariaDB [db1]> insert student_info values(1,'cobbler');
Query OK, 1 row affected (0.01 sec)
查看student_info表裏面已經有了一條信息
MariaDB [db1]> select * from student_info;
+--------+----------+
| stu_id | stu_name |
+--------+----------+
| 1 | cobbler |
+--------+----------+
1 row in set (0.00 sec)
查看student_count裏面的統計數,
MariaDB [db1]> select * from student_count;
+---------------+
| student_count |
+---------------+
| 1 |
+---------------+
1 row in set (0.00 sec)