반응형
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
반응형
'programing' 카테고리의 다른 글
ReactJS: 최대 업데이트 깊이가 오류를 초과했습니다. (0) | 2023.01.31 |
---|---|
호출 실패 예기치 않은 서버 응답 수정 방법:Android Studio에서 승인되지 않음 (0) | 2023.01.31 |
JavaScript에서 화살표 키 누름 감지 (0) | 2023.01.31 |
MySQL과 SQLite 양쪽에 고유한 제약 및 삽입 또는 업데이트 (0) | 2023.01.31 |
PDO와 마리아DB (0) | 2023.01.31 |