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

NULL 값이 포함된 열에 ALTER TABLE로 NOT NULL 제약 조건을 적용하면 어떻게 될까?

MySQL에서 NULL 값이 포함된 열에 ALTER TABLE 문을 사용하여 NOT NULL 제약 조건을 적용하려고 하면, 해당 열에 대해 '데이터가 잘렸다(Data truncated)'는 의미의 오류 메시지가 반환됩니다. 다음 예시를 통해 자세히 살펴보겠습니다.

예시

'test2'라는 테이블에 'ID' 열의 두 번째 행에 NULL 값이 저장되어 있다고 가정해 보겠습니다. 이 상태에서 ID 열을 NOT NULL로 변경하려고 하면 MySQL은 다음과 같은 오류를 반환합니다.

mysql> Select * from test2;
+------+--------+
| ID   | Name   |
+------+--------+
| 1    | Gaurav |
| NULL | Rahul  |
+------+--------+
2 rows in set (0.00 sec)
mysql> ALTER TABLE TEST2 MODIFY ID INT NOT NULL;
ERROR 1265 (01000): Data truncated for column 'ID' at row 2

오류 발생 원인

NOT NULL 제약 조건은 해당 열의 모든 행에 반드시 값이 존재해야 한다는 규칙입니다. 그런데 기존 데이터 중 이미 NULL 값이 들어 있는 행이 있다면 이 제약 조건과 충돌하기 때문에, MySQL은 ALTER TABLE 문의 실행을 거부하고 오류를 반환하는 것입니다.

해결 방법

이 문제를 해결하려면 다음 순서로 작업을 진행해야 합니다.

  1. UPDATE 문으로 NULL 값 처리: 먼저 NULL이 포함된 행을 찾아 유효한 기본값 또는 적절한 값으로 업데이트합니다.
  2. ALTER TABLE 문 재실행: 모든 NULL 값이 처리된 후에 NOT NULL 제약 조건을 적용하는 ALTER TABLE 문을 다시 실행합니다.

예를 들어 위의 경우는 다음과 같이 처리할 수 있습니다.

mysql> UPDATE test2 SET ID = 2 WHERE ID IS NULL;
mysql> ALTER TABLE TEST2 MODIFY ID INT NOT NULL;

이렇게 하면 NULL 값이 없어진 상태에서 NOT NULL 제약 조건이 정상적으로 적용됩니다.