เป็นไปได้หรือไม่ที่จะแก้ไข definition ทริกเกอร์ที่มีอยู่ใน MySQL?


14

ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะอัพเดทคำจำกัดความของทริกเกอร์ใน MySQL ตัวอย่างเช่นฉันมีทริกเกอร์ T และฉันต้องการเพิ่มฟังก์ชันใหม่บางอย่างลงไป

ข้อสันนิษฐานของฉันคือฉันต้องวางและสร้างใหม่

แนวทางปฏิบัติที่ดีที่สุดในการบริหารฐานข้อมูลสำหรับสถานการณ์ดังกล่าวคืออะไร


อเล็กซ์คุณเคยดูเอกสารประกอบ MySQL เพื่อหาคำจำกัดความของทริกเกอร์หรือไม่ มันพูดว่าอะไร; ส่วนใดที่คุณไม่แน่ใจหรือก่อให้เกิดปัญหาเมื่อคุณพยายามนำไปใช้
Michael Green

ฉันไม่พบข้อมูลใด ๆ ในเอกสารคู่มือ MySQL หากเป็นไปได้ที่จะอัปเดตทริกเกอร์หรือไม่ ฉันคิดว่ามันเป็นไปไม่ได้และฉันต้องการตรวจสอบอีกครั้ง
อเล็กซ์

คำตอบ:


19

ดูเหมือนว่าคุณกำลังถามว่าเป็นไปได้หรือไม่ที่จะเปลี่ยนทริกเกอร์ในการดำเนินการปรมาณูซึ่งหากคำจำกัดความใหม่ล้มเหลวคุณจะไม่สูญเสียสิ่งเก่า ... คล้ายกับCREATE OR REPLACE VIEWซึ่งแทนที่คำจำกัดความการดูหากคำจำกัดความใหม่ ถูกต้อง แต่ปล่อยให้เครื่องเก่าแทนที่หากคุณไม่สามารถแทนที่ได้

น่าเสียดายที่ไม่มีALTER TRIGGERหรือCREATE OR REPLACE TRIGGERอยู่ใน MySQL

ฉันขอแนะนำว่าวิธีปฏิบัติที่ดีที่สุดคือล็อคตารางที่ตัวเรียกใช้งานอยู่ดังนั้นจึงไม่มีผลกระทบต่อแถวเมื่อไม่มีตัวเรียก ปล่อยและเพิ่มทริกเกอร์ในขณะที่ตารางถูกล็อคได้รับอนุญาต

mysql> LOCK TABLES t1 WRITE; -- the next prompt appears once you've obtained the lock
mysql> DROP TRIGGER t1_bi; 
mysql> DELIMITER $$
mysql> CREATE TRIGGER ti_bi BEFORE INSERT ON t1 FOR EACH ROW 
       BEGIN
       ...
       END $$
mysql> DELIMITER ;
mysql> UNLOCK TABLES;

อัปเดต: MariaDB ในเวอร์ชัน 10.1.4 เพิ่มการรองรับCREATE OR REPLACE TRIGGERการแทนที่สำหรับ MySQL

https://mariadb.com/kb/en/mariadb/create-trigger/

ออราเคิล MySQL ในฐานะ 5.7 ยังคงพึ่งพาวิธีแก้ปัญหาข้างต้น


2
"MySQL ของ Oracle ตั้งแต่วันที่ 5.7 ยังคงขึ้นอยู่กับวิธีการแก้ปัญหาข้างต้น" - ยังคงเป็นกรณีในรุ่น 8.0
Paul Campbell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.