MySQL-觸發器

1、什麼叫觸發器:
    當滿足一定的條件以後,它會觸發一個動作的執行,trigger
2、觸發器的執行不是由程序調用,也不是由手工啓動,而是由事件來觸發、激活從而實現執行
3、觸發器是由一定的事件來觸發的,對錶的增刪改操作、不包括查詢,查詢是沒有觸發器的
4、生產中一般不通過MySQL中觸發器來實現這功能,是通過Java程序、Python程序代碼來實現觸發器
5、創建觸發器:
        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:該觸發器作用在表名
6、查看觸發器
        SHOW TRIGGERS
        查詢系統表information_schema.triggers的方式指定查詢條件,查看指定的觸發器信息。
        mysql> USE information_schema;
        Database changed
        mysql> SELECT * FROM triggers WHERE
7、刪除觸發器
        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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章