Thật không may, MySQL không hỗ trợ các ràng buộc kiểm tra SQL. Bạn có thể xác định chúng trong truy vấn DDL của mình vì lý do tương thích nhưng chúng chỉ bị bỏ qua.
Có một cách thay thế đơn giản
Bạn có thể tạo BEFORE INSERT
và BEFORE UPDATE
kích hoạt gây ra lỗi hoặc đặt trường thành giá trị mặc định khi các yêu cầu của dữ liệu không được đáp ứng.
Ví dụ để BEFORE INSERT
làm việc sau MySQL 5.5
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Test`
FOR EACH ROW
BEGIN
IF CHAR_LENGTH( NEW.ID ) < 4 THEN
SIGNAL SQLSTATE '12345'
SET MESSAGE_TEXT := 'check constraint on Test.ID failed';
END IF;
END$$
DELIMITER ;
Trước MySQL 5.5, bạn phải gây ra lỗi, ví dụ: gọi thủ tục không xác định.
Trong cả hai trường hợp, điều này gây ra một rollback giao dịch ngầm. MySQL không cho phép chính câu lệnh ROLLBACK trong các thủ tục và trình kích hoạt.
Nếu bạn không muốn phục hồi giao dịch (CHERTN / CẬP NHẬT sẽ vượt qua ngay cả với "ràng buộc kiểm tra" không thành công, bạn có thể ghi đè giá trị bằng cách SET NEW.ID = NULL
đặt id thành giá trị mặc định của trường, không thực sự có ý nghĩa đối với id tho
Chỉnh sửa:
Đã xóa trích dẫn đi lạc.
Liên quan đến :=
nhà điều hành:
Không giống như =
, :=
toán tử không bao giờ được hiểu là toán tử so sánh. Điều này có nghĩa là bạn có thể sử dụng :=
trong bất kỳ câu lệnh SQL hợp lệ nào (không chỉ trong các câu lệnh SET) để gán giá trị cho một biến.
https://dev.mysql.com/doc/refman/5.6/en/assocate-operators.html
Liên quan đến trích dẫn định danh backtick:
Ký tự trích dẫn định danh là backtick (`` `)
Nếu chế độ SQL ANSI_QUOTES được bật, bạn cũng có thể trích dẫn định danh trong dấu ngoặc kép
http://dev.mysql.com/doc/refman/5.6/vi/identifier.html