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

问题描述 投票:0回答:2

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

我知道复合唯一索引,但是它们检查复制的usernamealias的组合,而不是一个用户的username的组合等于新用户的alias

mysql sql ddl
2个回答
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背景:)


0
投票

关系方式是制作另一个表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的聚集索引。

© www.soinside.com 2019 - 2024. All rights reserved.