Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 UNIQUE 제약 조건 설정 후 중복 값을 포함한 다중 INSERT를 하면 어떻게 될까?

UNIQUE 제약 조건이 설정된 테이블에 중복 값으로 다중 INSERT하면 어떻게 될까?

UNIQUE 제약 조건이 걸린 컬럼에 중복된 값을 포함하여 여러 행을 한 번에 삽입하면, 오류가 발생하고 어떤 행도 테이블에 삽입되지 않습니다. MySQL의 다중 행 INSERT 문은 하나의 작업 단위로 처리되기 때문에, 단 하나의 행이라도 제약 조건을 위반하면 전체 삽입 작업이 실패합니다.

예제를 통해 직접 확인해 보겠습니다. 먼저 테이블을 생성합니다.

mysql> create table DemoTable1585
-> (
-> StudentId int,
-> StudentMarks int,
-> UNIQUE(StudentId)
-> );
Query OK, 0 rows affected (1.02 sec)

위 테이블은 StudentId 컬럼에 UNIQUE 제약 조건이 설정되어 있으므로, 동일한 StudentId를 가진 행이 두 개 이상 존재할 수 없습니다.

이제 INSERT 명령으로 여러 레코드를 한 번에 삽입해 보겠습니다. 세 번째와 네 번째 값의 StudentId가 '3'으로 서로 중복됩니다.

mysql> insert into DemoTable1585 values(1,87),(2,98),(3,91),(3,48);
ERROR 1062 (23000): Duplicate entry '3' for key 'StudentId'

StudentId가 중복되는 행 (3, 91)과 (3, 48) 때문에 ERROR 1062 오류가 발생했습니다. 이때 앞서 정상적으로 처리되던 값들((1,87), (2,98))까지 모두 취소되어, 결과적으로 아무 데이터도 저장되지 않습니다.

SELECT 문으로 테이블의 모든 레코드를 조회해 확인해 보겠습니다.

mysql> select * from DemoTable1585;

실행 결과는 다음과 같습니다. 아무런 데이터도 삽입되지 않았음을 알 수 있습니다.

Empty set (0.00 sec)

정리

  • UNIQUE 제약 조건이 있는 컬럼에 중복 값이 포함된 다중 INSERT는 전체가 실패합니다.
  • 오류 발생 시 이미 처리 중이던 행들도 모두 취소되어 테이블에는 어떤 데이터도 남지 않습니다.
  • 중복이 있더라도 나머지 행은 삽입하고 싶다면 INSERT IGNORE 또는 ON DUPLICATE KEY UPDATE 구문을 활용할 수 있습니다.