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

MySQL ERROR 1136 '열 개수가 값 개수와 일치하지 않습니다' 오류 해결 방법

오류 발생 원인

MySQL에서 ERROR 1136 (21S01): Column count doesn't match value count at row 1 오류는 테이블에 레코드를 삽입할 때 INSERT 문의 값 개수가 테이블의 열(컬럼) 개수와 일치하지 않을 경우 발생합니다. 이 오류는 특히 AUTO_INCREMENT 컬럼이 있는 테이블에 값을 잘못 지정했을 때 자주 나타납니다.

오류 재현 예제

먼저 데모용 테이블을 생성해 보겠습니다.

mysql> create table errorDemo
-> (
-> User_Id int NOT NULL AUTO_INCREMENT,
-> User_Name varchar(20),
-> PRIMARY KEY(User_Id)
-> );
Query OK, 0 rows affected (0.47 sec)

위 테이블은 User_Id와 User_Name 두 개의 열로 구성되어 있습니다. 그런데 아래처럼 열 이름을 지정하지 않고 값 하나만 삽입하면 오류가 발생합니다.

mysql> insert into errorDemo values('John');
ERROR 1136 (21S01): Column count doesn't match value count at row 1

MySQL은 테이블에 정의된 모든 열에 해당하는 값을 기대하지만, 실제로는 값이 하나만 전달되었기 때문에 열 개수와 값 개수가 맞지 않아 오류가 발생한 것입니다.

오류 해결 방법

이러한 오류를 피하려면 INSERT 문에 삽입할 열 이름을 명시적으로 지정하는 다음 구문을 사용해야 합니다.

insert into yourTableName(yourColumnName1,yourColumnName2,...N)
values(yourValue1,yourValue2,....N);

이렇게 하면 값을 제공하지 않은 열은 기본값 또는 AUTO_INCREMENT 규칙에 따라 자동으로 처리됩니다.

정상적으로 데이터 삽입하기

이제 insert 명령을 사용하여 테이블에 레코드를 삽입해 보겠습니다. 쿼리는 다음과 같습니다.

mysql> insert into errorDemo(User_Name) values('John');
Query OK, 1 row affected (0.12 sec)
mysql> insert into errorDemo(User_Name) values('Carol');
Query OK, 1 row affected (0.14 sec)
mysql> insert into errorDemo(User_Name) values('Sam');
Query OK, 1 row affected (0.15 sec)

User_Id 열은 AUTO_INCREMENT로 설정되어 있으므로, User_Name 값만 지정하면 각 행에 1부터 시작하는 고유 번호가 자동으로 부여됩니다.

결과 확인

select 문을 사용하여 테이블의 모든 레코드를 조회할 수 있습니다.

mysql> select *from errorDemo;

출력 결과는 다음과 같습니다.

+---------+-----------+
| User_Id | User_Name |
+---------+-----------+
| 1 | John |
| 2 | Carol |
| 3 | Sam |
+---------+-----------+
3 rows in set (0.00 sec)

정리

'Column count doesn't match value count' 오류는 INSERT 문에서 테이블의 열 개수와 일치하지 않는 수의 값을 전달할 때 발생합니다. 가장 확실한 해결책은 INSERT 문에 삽입할 열 이름을 명시적으로 작성하는 것입니다. 이렇게 하면 AUTO_INCREMENT 열이나 기본값이 설정된 열을 자동으로 처리할 수 있어 코드의 안정성과 가독성도 함께 향상됩니다.