Bạn không thể khai báo ràng buộc DUY NHẤT trên nhiều bảng và MySQL hoàn toàn không hỗ trợ ràng buộc CHECK. Nhưng bạn có thể thiết kế một trình kích hoạt để tìm kiếm giá trị phù hợp trong bảng khác. Đây là một tập lệnh SQL thử nghiệm:
DROP TABLE IF EXISTS foo;
CREATE TABLE FOO (username VARCHAR(10) NOT NULL);
DROP TABLE IF EXISTS bar;
CREATE TABLE BAR (username VARCHAR(10) NOT NULL);
DROP TRIGGER IF EXISTS unique_foo;
DROP TRIGGER IF EXISTS unique_bar;
DELIMITER //
CREATE TRIGGER unique_foo BEFORE INSERT ON foo
FOR EACH ROW BEGIN
DECLARE c INT;
SELECT COUNT(*) INTO c FROM bar WHERE username = NEW.username;
IF (c > 0) THEN
-- abort insert, because foo.username should be NOT NULL
SET NEW.username = NULL;
END IF;
END//
CREATE TRIGGER unique_bar BEFORE INSERT ON bar
FOR EACH ROW BEGIN
DECLARE c INT;
SELECT COUNT(*) INTO c FROM foo WHERE username = NEW.username;
IF (c > 0) THEN
-- abort insert, because bar.username should be NOT NULL
SET NEW.username = NULL;
END IF;
END//
DELIMITER ;
INSERT INTO foo VALUES ('bill'); -- OK
INSERT INTO bar VALUES ('bill'); -- Column 'username' cannot be null
Bạn cũng cần các trình kích hoạt BẬT CẬP NHẬT tương tự cho mỗi bảng, nhưng bạn không cần bất kỳ trình kích hoạt nào BẬT XÓA.