개요
MySQL에서 INSERT 문에 열 목록(컬럼 리스트)을 지정하지 않으면, 테이블에 정의된 모든 열의 순서와 개수에 맞춰 값을 반드시 나열해야 합니다. 이때 특정 열에 값을 저장하고 싶지 않다면, 해당 자리에 NULL을 명시적으로 작성하면 됩니다.
insert into yourTableName values(NULL, yourValue, NULL, NULL, ...N);
예제 테이블 생성
먼저 실습에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1513
-> (
-> StudentId int,
-> StudentName varchar(20),
-> StudentAge int,
-> StudentCountryName varchar(20)
-> );
Query OK, 0 rows affected (0.58 sec)
NULL을 포함한 데이터 삽입
이제 insert 명령으로 레코드를 삽입합니다. 값이 없는 열 자리에는 NULL을 그대로 넣어줍니다.
mysql> insert into DemoTable1513 values(NULL,'Chris Brown',NULL,NULL);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1513 values(101,NULL,NULL,NULL);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1513 values(NULL,NULL,23,NULL);
Query OK, 1 row affected (0.42 sec)
mysql> insert into DemoTable1513 values(NULL,NULL,NULL,'US');
Query OK, 1 row affected (0.16 sec)
결과 확인
select 문을 사용해 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1513;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+-----------+-------------+------------+--------------------+
| StudentId | StudentName | StudentAge | StudentCountryName |
+-----------+-------------+------------+--------------------+
| NULL | Chris Brown | NULL | NULL |
| 101 | NULL | NULL | NULL |
| NULL | NULL | 23 | NULL |
| NULL | NULL | NULL | US |
+-----------+-------------+------------+--------------------+
4 rows in set (0.00 sec)
정리 및 주의 사항
열 목록을 생략한 INSERT 문에서는 반드시 다음 사항을 유의해야 합니다.
- 테이블에 정의된 모든 열의 개수와 순서가 정확히 일치해야 하며, 하나라도 빠지면 오류가 발생합니다.
NOT NULL제약조건이 설정된 열에는 NULL을 삽입할 수 없으므로, 반드시 유효한 값을 지정해야 합니다.- 기본값(DEFAULT)이 정의된 열이라면 NULL 대신
DEFAULT키워드를 사용할 수도 있습니다.
실무에서는 이러한 실수를 방지하기 위해 열 목록을 명시적으로 작성하는 방식(insert into 테이블명 (열1, 열3) values (...);)을 사용하는 것이 더 안전하고 가독성 면에서 권장됩니다.