當我們刪除具有該觸發器的表時,觸發器會發生什麼情況?

WBOY
發布: 2023-09-01 16:41:10
轉載
912 人瀏覽過

當我們刪除具有該觸發器的表時,觸發器會發生什麼情況?

如果我們銷毀與其關聯的表,觸發器也會被銷毀。這稱為觸發器的明確銷毀。可以透過一個例子來理解 -

範例

假設我們在名為「Sample」的表上有一個名為「trigger_before_delete_sample」的觸發器。現在,如果我們刪除該表,那麼與該表關聯的上述觸發器也將被刪除。

mysql> Show Triggers\G
*************************** 1. row ***************************
              Trigger: trigger_before_delete_sample
                Event: DELETE
                Table: sample
            Statement: BEGIN
         SET @count = if (@count IS NULL, 1, (@count+1));
         INSERT INTO sample_rowaffected values (@count);
END
               Timing: BEFORE
              Created: 2017-11-21 12:31:58.70
             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: cp850
 collation_connection: cp850_general_ci
   Database Collation: latin1_swedish_ci
*************************** 2. row ***************************
              Trigger: before_inser_studentage
                Event: INSERT
                Table: student_age
            Statement: IF NEW.age < 0 THEN SET NEW.age = 0;
END IF
               Timing: BEFORE
              Created: 2017-11-21 11:26:15.34
             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: cp850
 collation_connection: cp850_general_ci
   Database Collation: latin1_swedish_ci
2 rows in set (0.01 sec)
登入後複製

上面的結果集顯示資料庫中有兩個觸發器,其中一個觸發器與名為「Sample」的表關聯。現在,借助以下語句,我們將刪除該表 -

mysql> DROP table sample;
Query OK, 0 rows affected (0.26 sec)
登入後複製

現在藉助以下語句,我們可以看到與名為「Sample」的表關聯的觸發器也被銷毀了。

mysql> Show Triggers\G
*************************** 1. row ***************************
              Trigger: before_inser_studentage
                Event: INSERT
                Table: student_age
            Statement: IF NEW.age < 0 THEN SET NEW.age = 0;
END IF
               Timing: BEFORE
              Created: 2017-11-21 11:26:15.34
             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: cp850
 collation_connection: cp850_general_ci
   Database Collation: latin1_swedish_ci
1 row in set (0.01 sec)
登入後複製

以上是當我們刪除具有該觸發器的表時,觸發器會發生什麼情況?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!