programing

MySQL/MariaDB 열 값이 다른 열에서 고유합니다.

firstcheck 2023. 1. 31. 20:56
반응형

MySQL/MariaDB 열 값이 다른 열에서 고유합니다.

각 사용자의 이메일 주소를 저장하는 사용자 로그인 데이터용 데이터베이스 스키마를 가지고 있습니다.사용자마다 하나의 계정만 가질 수 있으므로 당연히 이 이메일은 고유해야 합니다.또한 사용자가 전자 메일을 변경할 경우 새로운 임시 전자 메일 주소를 저장하는 다른 컬럼도 있습니다(이 컬럼을 변경하면 새 주소가 이 컬럼에 임시로 저장되며 사용자가 해당 컬럼에 전송된 전자 메일의 변경 내용을 수락하면 실제로 변경됩니다).

현재 설정에서 임시 열에 저장해야 하는 전자 메일이 임시 열에 이미 저장되어 있는지 확인하는 방법을 찾을 수 없습니다.

이를 위한 방법은 CHECK 구속조건을 사용하는 것이 좋습니까?

MariaDB 버전 15를 사용하고 있습니다.

최종적으로는, 「갱신 전」과 「트리거 삽입 전」의 2개의 솔루션을 사용할 수 있습니다.「email」은 메인 E-메일용 컬럼이고, 「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 ;

언급URL : https://stackoverflow.com/questions/55679498/mysql-mariadb-column-value-unique-in-different-column

반응형