มาทำความเข้าใจว่า MySQL จัดการกับ constraints อย่างไร
MySQL รองรับทั้งตารางแบบ transactional (รองรับ rollback) และ non-transactional (ไม่รองรับ rollback) ซึ่งเป็นเหตุผลที่การจัดการ constraints ใน MySQL แตกต่างจาก DBMS อื่นๆ ในฐานข้อมูล non-transactional หากเกิดข้อผิดพลาดขณะ insert หรือ update หลายแถว จะไม่สามารถ rollback กลับได้ กรณีนี้ต้องจัดการอย่างเหมาะสม
MySQL Server จะสร้าง error สำหรับคิวรีที่ตรวจพบว่าเป็นข้อผิดพลาดขณะ parsing statement ที่ต้อง execute หลังจากตรวจพบ error แล้ว จะพยายาม recover จาก errors ขณะ executing statement (ไม่ได้ทำกับทุก statement ในปัจจุบัน)
MySQL สามารถหยุด statement กลางคัน หรือ recover แล้วทำงานต่อเมื่อเกิด error โดย default server จะ recover และทำงานต่อ
Foreign keys อนุญาตให้ cross-referencing ข้อมูลข้ามตาราง และ foreign key constraints ช่วยให้ข้อมูลที่กระจายอยู่นี้คงสอดคล้องกัน
Foreign Key References
MySQL รองรับ ON UPDATE และ ON DELETE foreign key references ในคำสั่ง CREATE TABLE และ ALTER TABLE
Referential Actions (การกระทำอ้างอิง)
Referential actions ที่มีอยู่ ได้แก่: RESTRICT, CASCADE, SET NULL, และ NO ACTION
NO ACTION เป็น default referential action
ENUM
ค่า ENUM ต้องเป็นค่าที่ระบุใน column definition หรือค่า numeric equivalent ภายใน ไม่สามารถเป็น error value (0 หรือ empty string) ได้ สำหรับคอลัมน์ที่定義เป็น ENUM('a','b','c') ค่าอื่นนอกจาก 'a', 'b', 'c' เช่น '', 'd', 'ax' จะถือว่า invalid และถูกปฏิเสธ