是否可以在MySQL中的两个表中强制实现唯一性?
我有两个表,都描述用户.这些表中的用户以前用于两个不同的系统,但是现在我们正在合并我们的身份验证系统,我需要确保这两个表中有唯一的用户名.(现在将它们全部放入一个表中是太多的工作).
您不能在多个表之间声明UNIQUE约束,并且MySQL根本不支持CHECK约束.但是您可以设计一个触发器来搜索另一个表中的匹配值.这是一个测试SQL脚本:
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
对于每个表,您还需要类似的触发器ON UPDATE,但是您不需要任何触发器ON DELETE.