Hãy hiểu cách MySQL xử lý các ràng buộc.
MySQL hỗ trợ cả bảng giao dịch (transactional tables - cho phép rollback) và bảng phi giao dịch (non-transactional tables - không cho phép rollback). Đây là lý do xử lý ràng buộc trong MySQL khác với các DBMS khác. Trong cơ sở dữ liệu phi giao dịch, nếu lỗi xảy ra khi chèn hoặc cập nhật nhiều hàng, không thể rollback. Trường hợp này phải được xử lý đúng cách.
MySQL Server tạo ra lỗi cho các truy vấn được phát hiện là lỗi khi phân tích câu lệnh cần thực thi. Sau khi phát hiện lỗi, nó cố gắng khôi phục từ lỗi khi thực thi câu lệnh. Điều này chưa được thực hiện cho tất cả các câu lệnh.
MySQL có thể dừng câu lệnh ở giữa hoặc khôi phục và tiếp tục khi lỗi xảy ra. Mặc định, server sẽ khôi phục và tiếp tục.
Khóa ngoại cho phép tham chiếu chéo dữ liệu giữa các bảng, và ràng buộc khóa ngoại giúp đảm bảo dữ liệu phân tán này vẫn nhất quán.
Tham chiếu khóa ngoại (Foreign Key References)
MySQL hỗ trợ ON UPDATE và ON DELETE trong câu lệnh CREATE TABLE và ALTER TABLE.
Hành động tham chiếu (Referential Actions)
Các hành động tham chiếu có sẵn: RESTRICT, CASCADE, SET NULL, và NO ACTION.
NO ACTION là hành động tham chiếu mặc định.
ENUM
Giá trị ENUM phải là một trong các giá trị liệt kê trong định nghĩa cột, hoặc tương đương số nội bộ. Giá trị không thể là giá trị lỗi (0 hoặc chuỗi rỗng). Với cột định nghĩa là ENUM('a','b','c'), các giá trị khác 'a', 'b', 'c' như '', 'd', 'ax' được coi là không hợp lệ và bị từ chối.