MySQL / MariaDB列值在不同列中是唯一的

时间:2019-04-14 19:59:17

标签: mysql sql mariadb

我有一个用于用户登录数据的数据库架构,该架构存储了每个用户的电子邮件地址。自然,此电子邮件需要唯一,因为每个用户只能拥有一个帐户。如果用户要更改其电子邮件,我还有另一列存储新的临时电子邮件地址(更改后,新地址将临时存储在此列中,并且当用户接受E中的更改时) -发送给他们的邮件实际上将发生更改。)

我当前的设置缺少一种检查应存储在临时列中的电子邮件是否已经存储在非临时列中的方法。

有没有一种方法,最好使用CHECK约束?

我正在使用MariaDB版本15。

1 个答案:

答案 0 :(得分:2)

我最终得到的解决方案使用BEFORE UPDATE和BEFORE INSERT TRIGGERS: “电子邮件”是主电子邮件的列,“新邮件”是临时地址的列。

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 ;