Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

จะเกิดอะไรขึ้นกับทริกเกอร์เมื่อเราวางตารางที่มีทริกเกอร์นั้น


ทริกเกอร์จะถูกทำลายด้วยหากเราจะทำลายตารางที่สัมพันธ์กับตารางนั้น เรียกว่าการทำลายอย่างชัดเจนของทริกเกอร์ สามารถเข้าใจได้ด้วยความช่วยเหลือของตัวอย่าง -

ตัวอย่าง

สมมติว่าเรามีทริกเกอร์ชื่อ 'trigger_before_delete_sample' บนโต๊ะชื่อ 'Sample' ตอนนี้ถ้าเราจะลบตารางนี้ ทริกเกอร์ด้านบนที่เชื่อมโยงกับตารางนี้จะถูกลบออกด้วย

mysql> แสดงทริกเกอร์\G*************************** 1. แถว ************* **************** ทริกเกอร์:trigger_before_delete_sample เหตุการณ์:DELETE Table:ตัวอย่างคำสั่ง:BEGIN SET @count =ถ้า (@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_DIVIENGSION_BY_ZERO_CREATE_ONEP USER_FOR_DIVIENGSIONAL_ZERO_CARE_ATE cp850_general_ci การจัดเรียงฐานข้อมูล:latin1_swedish_ci****************************** 2. แถว *************** ************ ทริกเกอร์:before_inser_studentage เหตุการณ์: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 ผู้กำหนด:root@localhost character_set_client:cp850 collation_connection:cp850_general_ci การจัดเรียงฐานข้อมูล:latin1_swedish_0.01 แถวในการตั้งค่าล่วงหน้า 

ชุดผลลัพธ์ด้านบนแสดงให้เห็นว่ามีทริกเกอร์สองตัวในฐานข้อมูล โดยจะมีทริกเกอร์ที่เชื่อมโยงกับตารางที่ชื่อ 'ตัวอย่าง' ด้วยความช่วยเหลือของข้อความต่อไปนี้ เราจะวางตาราง -

mysql> ตัวอย่างตาราง DROP แบบสอบถามตกลง 0 แถวได้รับผลกระทบ (0.26 วินาที)

ด้วยความช่วยเหลือของคำสั่งต่อไปนี้ เราจะเห็นว่าทริกเกอร์ซึ่งเชื่อมโยงกับตารางที่ชื่อ 'Sample' ก็ถูกทำลายเช่นกัน

mysql> แสดงทริกเกอร์\G*************************** 1. แถว ************* **************** ทริกเกอร์: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 ตัวกำหนดฐานข้อมูล:ในภาษาละตินชุดที่ 1 ตัวกำหนดตำแหน่ง:รากที่ @ ท้องถิ่น