假设我有一个User
表,该表的username
列具有唯一约束。现在,我需要添加一个alias
列,该列也必须是唯一的,但又增加了一个要求,即两个用户不能具有相同的username
和alias
(user1.username <> user2.alias
)。我将如何使用MySQL做到这一点?
我知道复合唯一索引,但是它们会检查username
和alias
的组合是否重复,而不是一个用户的username
等于新用户的{{ 1}}。
答案 0 :(得分:1)
关系方式是制作另一个表user_names
,每个用户在该表中可以有一个或多个行。
CREATE TABLE user_name (
user_id INT NOT NULL,
user_name VARCHAR(16) NOT NULL,
PRIMARY KEY (user_id, user_name),
UNIQUE KEY (user_name)
);
UNIQUE KEY在所有用户中都具有唯一性。
复合的PRIMARY KEY使得从users
表到user_names
的聚集索引的连接非常有效。
答案 1 :(得分:0)
我会在该表上触发一个触发器。您在这里找到的详细信息-> https://www.siteground.com/kb/mysql-triggers-use/。
基本上,您将在每次插入前进行检查。并不是表演的好朋友,但这可以满足您的需求。
CREATE TRIGGER aliascheck BEFORE INSERT ON User FOR EACH ROW IF NEW.alias in (select username from User) THEN SIGNAL SQLSTATE '45000' set message_text='Alias already exists!'; END IF;
...或类似的东西。我有TSQL背景:)