Как сделать столбец уникальным по сравнению с другими столбцами - PullRequest
0 голосов
/ 07 января 2020

Допустим, у меня есть таблица User со столбцом username, который имеет уникальное ограничение. Теперь мне нужно добавить столбец alias, который также должен быть уникальным, но с дополнительным требованием, чтобы ни у двух пользователей не было одинаковых username и alias (user1.username <> user2.alias). Как бы я go сделал это с MySQL?

Я знаю о составных уникальных индексах, но они проверяют на предмет дублирования комбинации username и alias, а не комбинации одного пользователя username равно новому пользователю alias.

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Реляционным способом было бы создать еще одну таблицу 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 обеспечивает уникальность для всех пользователей.

Составной ПЕРВИЧНЫЙ КЛЮЧ делает возможным объединение из таблицы users в кластеризованный индекс user_names.

0 голосов
/ 07 января 2020

Я бы go для триггера на этой таблице. Особенности вы найдете здесь -> 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;

... Или что-то в этом роде. У меня есть T SQL background:)

...