如何使一列在其他列中具有唯一值

时间:2020-01-07 20:01:50

标签: mysql sql ddl

假设我有一个User表,该表的username列具有唯一约束。现在,我需要添加一个alias列,该列也必须是唯一的,但又增加了一个要求,即两个用户不能具有相同的usernamealiasuser1.username <> user2.alias)。我将如何使用MySQL做到这一点?

我知道复合唯一索引,但是它们会检查usernamealias的组合是否重复,而不是一个用户的username等于新用户的{{ 1}}。

2 个答案:

答案 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背景:)