假设我有一个User
表,其中的username
列具有唯一约束。现在,我需要添加一个alias
列,该列也必须是唯一的,但是增加了一个要求,即两个用户不能具有相同的username
和alias
(user1.username <> user2.alias
)。我将如何使用MySQL执行此操作?
我知道复合唯一索引,但是它们检查复制的username
和alias
的组合,而不是一个用户的username
的组合等于新用户的alias
。
我会在那张桌子上触发。您在此处找到的详细信息-> 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背景:)
关系方式是制作另一个表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)
);
唯一键在所有用户中强制唯一。
使用复合主键可以有效地从users
表连接到user_names
的聚集索引。