MySQL에서 datetime 열의 기본값을 '0000-00-00'으로 설정하려면 DEFAULT 키워드를 사용하면 됩니다. 이번 글에서는 테이블 생성부터 데이터 삽입, 조회까지 전체 과정을 예제와 함께 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 datetime 열에 기본값 '0000-00-00 00:00:00'을 지정하여 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> EmployeeName varchar(20),
-> EmployeeJoiningDate datetime default '0000-00-00 00:00:00'
-> )ENGINE=MyISAM,AUTO_INCREMENT=100;
Query OK, 0 rows affected (0.21 sec)
위 쿼리에서 EmployeeJoiningDate 열은 별도의 날짜 값이 입력되지 않으면 자동으로 '0000-00-00 00:00:00'이 저장됩니다. 또한 AUTO_INCREMENT=100 옵션을 사용해 자동 증가 시작 값을 100으로 지정했습니다.
2. 데이터 삽입하기
insert 명령을 사용하여 직원 이름만 입력한 레코드를 여러 개 추가합니다. 날짜 값을 지정하지 않았기 때문에 기본값이 적용됩니다.
mysql> insert into DemoTable(EmployeeName) values('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(EmployeeName) values('David');
Query OK, 1 row affected (0.04 sec)
mysql> insert into DemoTable(EmployeeName) values('Mike');
Query OK, 1 row affected (0.03 sec)
mysql> insert into DemoTable(EmployeeName) values('Sam');
Query OK, 1 row affected (0.06 sec)3. 결과 확인하기
select 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------------+--------------+---------------------+
| EmployeeId | EmployeeName | EmployeeJoiningDate |
+------------+--------------+---------------------+
| 100 | Chris | 0000-00-00 00:00:00 |
| 101 | David | 0000-00-00 00:00:00 |
| 102 | Mike | 0000-00-00 00:00:00 |
| 103 | Sam | 0000-00-00 00:00:00 |
+------------+--------------+---------------------+
4 rows in set (0.00 sec)
출력 결과를 보면 날짜 값을 따로 입력하지 않은 모든 레코드에 기본값인 '0000-00-00 00:00:00'이 저장된 것을 확인할 수 있습니다.
참고 사항
MySQL 5.7 이상 버전에서는 기본적으로 엄격 모드(strict mode)가 활성화되어 있어 '0000-00-00'과 같은 영(零) 날짜 값을 허용하지 않을 수 있습니다. 이 경우 다음과 같이 sql_mode에서 NO_ZERO_DATE, NO_ZERO_IN_DATE 옵션을 제거해야 해당 기본값을 사용할 수 있습니다.
SET GLOBAL sql_mode = REPLACE(@@sql_mode, 'NO_ZERO_DATE', '');
다만 영(零) 날짜는 데이터 유효성 검증에 문제를 일으킬 수 있으므로, 가능하면 CURRENT_TIMESTAMP나 NULL을 기본값으로 사용하는 것이 권장됩니다.