TIMESTAMP and DATETIME 기능 개선
MariaDB 10 버전이 올라가면 기능이 향상되는데, TIMESTAMP 와 DATETIME 의 데이터 타입(Data Type)을 사용하는 컬럼에 경우 Update, Insert 시에 몇가지 기능이 향상되었습니다.
1 2 3 4 5 6 |
CREATE TABLE test_date ( a INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); |
여기서 주목해야 할 것은 ‘created TIMESTAMP DEFAULT CURRENT_TIMESTAMP‘와 ‘updated TIMESTAMP ON UPDATE CURRENT_TIMESTAMP‘ 입니다.
1 2 3 4 5 6 7 8 9 10 |
desc test_date; +---------+------------------+------+-----+---------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +---------+------------------+------+-----+---------------------+-----------------------------+ | a | int(10) unsigned | NO | PRI | NULL | auto_increment | | b | int(11) | YES | | NULL | | | created | timestamp | NO | | CURRENT_TIMESTAMP | | | updated | timestamp | NO | | 0000-00-00 00:00:00 | on update CURRENT_TIMESTAMP | +---------+------------------+------+-----+---------------------+-----------------------------+ 4 rows in set (0.01 sec) |
Default와 Extra 컬럼에 내용을 자세히 보십시오.
여기서 Insert 를 다음과 같이 합니다.
1 2 3 4 5 6 7 8 9 10 |
root@localhost:test 16:40:38> INSERT INTO test_date SET b=1; Query OK, 1 row affected (0.02 sec) root@localhost:test 16:41:38> SELECT * FROM test_date; +---+------+---------------------+---------------------+ | a | b | created | updated | +---+------+---------------------+---------------------+ | 1 | 1 | 2014-10-26 16:41:38 | 0000-00-00 00:00:00 | +---+------+---------------------+---------------------+ 1 row in set (0.00 sec) |
‘created’ 컬럼에 자동으로 시간이 등록됩니다. 과거에는 다음과 같이 해줬어야 했습니다.
1 |
INSERT INTO test_date SET b=1, created=now(); |
‘now()’ 함수를 사용해서 했어야 했지만 Mariadb 10 에서 TIMESTAMP 타입을 이용해서 컬럼을 정의하면 더 손쉽게 자동으로 처리를 해줍니다.
다음과 같이 Update 를 해봅니다.
1 2 3 4 5 6 7 8 9 10 11 |
mysql> UPDATE test_date SET b = b+1; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM test_date; +---+------+---------------------+---------------------+ | a | b | created | updated | +---+------+---------------------+---------------------+ | 1 | 2 | 2012-06-12 17:07:20 | 2012-06-12 17:11:48 | +---+------+---------------------+---------------------+ 1 row in set (0.00 sec) |
update 필드에 값이 자동으로 시간이 업데이트 됩니다. DATETIME 도 이와 같은데 다른점은 값이 없을 경우 ‘NULL’이 됩니다.
1 2 3 4 5 6 |
CREATE TABLE test_date2 ( a INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, created DATETIME DEFAULT CURRENT_TIMESTAMP, updated DATETIME ON UPDATE CURRENT_TIMESTAMP ); |
test_date2 를 만들고 다음과 같이 실행보면 값이 없을때는 NULL이 들어 갑니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
root@localhost:test 16:46:45>INSERT INTO test_date2 SET b=1; Query OK, 1 row affected (0.02 sec) root@localhost:test 16:47:34>select * from test_date2; +---+------+---------------------+---------+ | a | b | created | updated | +---+------+---------------------+---------+ | 1 | 1 | 2014-10-26 16:47:34 | NULL | +---+------+---------------------+---------+ 1 row in set (0.00 sec) root@localhost:test 16:47:42>UPDATE test_date2 SET b = b+1; Query OK, 1 row affected (0.03 sec) Rows matched: 1 Changed: 1 Warnings: 0 root@localhost:test 16:48:05>select * from test_date2; +---+------+---------------------+---------------------+ | a | b | created | updated | +---+------+---------------------+---------------------+ | 1 | 2 | 2014-10-26 16:47:34 | 2014-10-26 16:48:05 | +---+------+---------------------+---------------------+ 1 row in set (0.00 sec) |