Уникальное значение столбца MySQL / MariaDB в другом столбце - PullRequest
1 голос
/ 14 апреля 2019

У меня есть схема базы данных для данных входа пользователя, в которой хранится адрес электронной почты для каждого пользователя.Естественно, этот E-Mail должен быть уникальным, потому что у каждого пользователя должна быть только одна учетная запись.У меня также есть другой столбец, в котором хранится новый временный адрес электронной почты, если пользователь хочет изменить свой адрес электронной почты (при его изменении новый адрес будет временно сохранен в этом столбце, и когда пользователь примет изменение в E-Почта, отправленная им, изменение действительно произойдет).

В моих текущих настройках отсутствует способ проверить, хранится ли электронная почта, которая должна быть сохранена во временном столбце, во невременномколонка.

Есть ли способ сделать это, предпочтительно используя ограничения CHECK?

Я использую MariaDB версии 15.

1 Ответ

2 голосов
/ 15 апреля 2019

Решение, которое я выбрал, использует ПЕРЕД ОБНОВЛЕНИЕМ и ПЕРЕД ВСТАВКОЙ ТРИГГЕРАМИ: «email» - это столбец для основной электронной почты, а «new_email» - это столбец для временного адреса.

DELIMITER //
CREATE TRIGGER TRIGG_prevent_duplicate_emails_update1
BEFORE UPDATE ON `DefaultLogins`
FOR EACH ROW
    BEGIN
        IF NEW.new_email IN (SELECT `email` FROM `DefaultLogins`) THEN
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'The new value for "new_email" already exists in "email".';
        END IF;
    END; //
DELIMITER ;

DELIMITER //
CREATE TRIGGER TRIGG_prevent_duplicate_emails_insert1
BEFORE INSERT ON `DefaultLogins`
FOR EACH ROW
    BEGIN
        IF NEW.new_email IN (SELECT `email` FROM `DefaultLogins`) THEN
            SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = 'The new value for new_email already exists in "email".';
        END IF;
    END; //
DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...