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

MySQL 오류 1136 해결 방법: 열 개수가 행 1의 값 개수와 일치하지 않을 때

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 컬럼은 자동으로 값이 생성되고, 코드의 가독성도 향상되며, 나중에 테이블 구조가 변경되더라도 오류 발생 가능성을 크게 줄일 수 있습니다.