MySQL에서 데이터를 삽입할 때 ERROR 1136 (21S01): Column count doesn't match value count at row 1 오류가 발생하는 경우가 있습니다. 이 오류는 주로 AUTO_INCREMENT 컬럼에 대한 값을 누락했거나, INSERT 문의 컬럼 수와 실제 입력하려는 값의 개수가 서로 다를 때 발생합니다.
mysql> insert into DemoTable1353 values('Chris',23);
ERROR 1136 (21S01): Column count doesn't match value count at row 1오류의 원인
테이블에 총 3개의 컬럼(Id, Name, Age)이 존재하는데, 위 예시처럼 컬럼 목록을 지정하지 않은 채 2개의 값만 전달하면 MySQL은 어떤 컬럼에 어떤 값을 넣어야 할지 판단할 수 없어 오류를 발생시킵니다. 특히 AUTO_INCREMENT로 설정된 기본 키 컬럼이 있는 경우 이런 실수가 자주 발생합니다.
해결 방법
해결 방법은 크게 두 가지입니다.
- AUTO_INCREMENT 컬럼의 값을 직접 지정하는 방법
- 컬럼 목록을 명시하여 AUTO_INCREMENT 값의 자동 생성을 맡기는 방법
일반적으로 두 번째 방법이 권장됩니다. 아래에서 실제 예제를 통해 살펴보겠습니다.
1단계: 테이블 생성
AUTO_INCREMENT 기본 키를 포함한 테이블을 생성합니다.
mysql> create table DemoTable1353
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> Age int,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.52 sec)2단계: 컬럼 목록을 명시하여 레코드 삽입
INSERT 문 작성 시 컬럼 이름(Name, Age)을 명시적으로 지정하면, Id 컬럼의 값은 자동으로 생성됩니다.
mysql> insert into DemoTable1353(Name,Age) values('Chris',23);
Query OK, 1 row affected (0.30 sec)
mysql> insert into DemoTable1353(Name,Age) values('David',21);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1353(Name,Age) values('Bob',24);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1353(Name,Age) values('John',47);
Query OK, 1 row affected (0.11 sec)3단계: 결과 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1353;
위 명령을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | Chris | 23 | | 2 | David | 21 | | 3 | Bob | 24 | | 4 | John | 47 | +----+-------+------+ 4 rows in set (0.00 sec)
정리
오류 1136을 피하는 가장 확실한 방법은 INSERT 문을 작성할 때 항상 컬럼 목록을 명시적으로 지정하는 것입니다. 이렇게 하면 AUTO_INCREMENT 컬럼은 자동으로 값이 생성되고, 코드의 가독성도 향상되며, 나중에 테이블 구조가 변경되더라도 오류 발생 가능성을 크게 줄일 수 있습니다.