λ°μ΄ν°λ² μ΄μ€μμ νμλ‘ μ°μ΄λ λ μ§ν λ°μ΄ν°μ λν΄ μ 리ν΄λκ³ μ ν©λλ€.
4κ°μ§ μ νμ λ°μ΄ν° νμ μ λν μ 리μ μΌμμ μκ°μ λͺ¨λ νννλ DATETIMEκ³Ό TIMESTAMPμ μ°¨μ΄λ₯Ό μμλ³΄κ² μ΅λλ€.
1. DATE, DATETIME, TIMESTAMP, TIME
MySQLμμλ μΌμμ μκ°μ νννκΈ°μν΄ DATE, DATETIME, TIMESTAMP, TIME νμ μ μ¬μ©ν μ μμ΅λλ€.
DATE | DATETIME | TIMESTAMP | TIME | |
μμΈ | μΌμλ§ νν | - μΌμμ μκ° νν - μ΅λ λ§μ΄ν¬λ‘μ΄ μ λ°λμ μμ μ΄λ₯Ό ν¬ν¨ κ°λ₯ - νμ¬ λ μ§μ μκ°μΌλ‘ μλ μ΄κΈ°ν λ° μ λ°μ΄νΈκ° κ°λ₯ |
- μΌμμ μκ° νν - (default) NOT NULL - Timezone κΈ°λ° - μ΅λ λ§μ΄ν¬λ‘μ΄ μ λ°λμ μμ μ΄λ₯Ό ν¬ν¨ κ°λ₯ - νμ¬ λ μ§μ μκ°μΌλ‘ μλ μ΄κΈ°ν λ° μ λ°μ΄νΈκ° κ°λ₯ |
μκ°λ§ νν |
νμ | YYYY-MM-DD | YYYY-MM-DD hh:mm:ss | YYYY-MM-DD hh:mm:ss | hh:mm:ss |
λ²μ | '1000-01-01' ~'9999-12-31' |
'1000-01-01 00:00:00' ~ '9999-12-31 23:59:59' |
'1970-01-01 00:00:01' UTC ~ '2038-01-19 03:14:07' UTC |
'-838:59:59' ~'838:59:59' |
μ©λ | 3byte | 8byte | 4byte | 3byte |
μΌμμ μκ°μ λͺ¨λ νννλ DATETIMEκ³Ό TIMESTAMPλ μΌνλ΄μλ λΉμ·νλ°, μ°¨μ΄μ μ΄ μμ΅λλ€.
μ΄ λμ μ°¨μ΄λ₯Ό μκ³ μμ΄μΌ μμμΉ λͺ»ν μλ¬μ¬νμ λλΉν μ μκΈ° λλ¬Έμ, μ°¨μ΄μ μ ν λ² μμλ³΄κ² μ΅λλ€.
2. DATETIME vs TIMESTAMP
1) λ²μ
μΌμμ μκ°μ λͺ¨λ νννλ λ νμ μ μΌλ¨ νμμ λ³Ό μ μλ― λ²μμμ μ°¨μ΄κ° μμ΅λλ€.
DATETIMEμ λ²μλ '1000-01-01 00:00:00' λΆν° '9999-12-31 23:59:59' λ‘, μκ°λμ κ΄κ³μμ΄ μ λμ μΈ μΌμμ μκ°μ μ μ₯ν©λλ€.
TIMESTAMPμ λ²μλ '1970-01-01 00:00:01' UTC λΆν° '2038-01-19 03:14:07' UTC λ‘, λ°μ΄ν°κ° UTCλ‘ λ³νλμ΄ μ μ₯λλ©° κ²μμ νμ¬ μκ°λλ‘ λ³νμ΄ λ©λλ€. TIMESTAMPμ λ²μλ Unix μκ°κ³Ό κ΄λ ¨μ΄ μμ΄, 2038λ λ¬Έμ λ‘ μΈν΄ μ΅λ λ²μκ° 2038λ κΉμ§λ‘ μ νλ©λλ€.
2) Timezoneμ μ μ© μ¬λΆ
λ νμ μ Timezoneμ μ μ© μ¬λΆμ μ°¨μ΄κ° μμ΅λλ€.
Timezoneμ λμΌν μκ°μ λ°λ₯΄λ μ§μμ μλ―Ένκ³ , ν΄λΉ κ΅κ°μ μν΄ λ²μ μΌλ‘ μ§μ λλ κ°μ λλ€.
UTC, Asia/Seoul λ±μ νκΈ°κ° ν΄λΉ μκ°μ΄ μ΄λ€ λ‘컬μ κΈ°μ€μΌλ‘ μμ±ν κ²μΈμ§λ₯Ό λͺ μνλ κ²μ λλ€.
MySQLμ TIMESTAMP κ°μ νμ¬ μκ°λμμ *UTCλ‘ λ³ννμ¬ μ μ₯νκ³ , λ€μ UTCμμ νμ¬ μκ°λλ‘ λ³ννμ¬ κ²μν©λλ€.
*UTC: κ΅μ νμ€μ
κΈ°λ³Έμ μΌλ‘ μ€μ λλ μκ°λλ μλ² μκ°μΌλ‘, μκ°λ μ€μ μ΄ μΌμ νκ² μ μ§λλ€λ©΄ μ μ₯ν κ°κ³Ό λμΌν κ°μ λ°νλ°μ΅λλ€.
λ§μ½ TIMESTAMP κ°μ μ μ₯ν ν, μκ°λλ₯Ό λ³κ²½νκ³ κ°μ μ‘°ννλ©΄, μ‘°ν κ²°κ³Όλ μ μ₯ν κ°κ³Ό λ€λ₯΄κ² λ©λλ€. μκ°λ λ³νμ λμΌν μκ°λλ₯Ό μ¬μ©νμ§ μμκΈ° λλ¬Έμ μ΄λ¬ν κ²°κ³Όκ° λ°μνλ κ²μ λλ€.
*ν μκ°λλ μμ€ν λ³μμΈ time_zone μ μ€μ λ κ°μΌλ‘ νμΈν μ μμ΅λλ€.
μμ
μ€μ λ‘ λ°μ΄ν°κ° μ΄λ»κ² μ μ₯λλμ§ νμΈν΄λ΄ μλ€.
create table date_example
(
test_date date,
test_datetime datetime,
test_timestamp timestamp,
test_time time
);
insert into date_example values (now(), now(), now(), now());
ν μ€νΈ ν μ΄λΈμ λ§λ€κ³ νμ¬ μκ°μΌλ‘ λ°μ΄ν°λ₯Ό μ μ₯νμ΅λλ€.
mysql> select * from date_example;
+------------+---------------------+---------------------+-----------+
| test_date | test_datetime | test_timestamp | test_time |
+------------+---------------------+---------------------+-----------+
| 2024-07-09 | 2024-07-09 10:36:17 | 2024-07-09 10:36:17 | 10:36:17 |
+------------+---------------------+---------------------+-----------+
1 row in set (0.00 sec)
μΌμͺ½λΆν° DATE, DATETIME, TIMESTAMP, TIME νμμ λ°μ΄ν°κ° μ μ₯λ κ²μ νμΈν μ μμ΅λλ€.
μ¬κΈ°μ time_zoneμ μμ ν΄λ³΄κ³ λ€μ κ°μ λ°μ΄ν°λ₯Ό νμΈν΄λ³΄κ² μ΅λλ€.
mysql> SET time_zone = '+01:00';
Query OK, 0 rows affected (0.00 sec)
mysql> select * from date_example;
+------------+---------------------+---------------------+-----------+
| test_date | test_datetime | test_timestamp | test_time |
+------------+---------------------+---------------------+-----------+
| 2024-07-09 | 2024-07-09 10:36:17 | 2024-07-09 02:36:17 | 10:36:17 |
+------------+---------------------+---------------------+-----------+
1 row in set (0.00 sec)
time_zoneμ λ³νλ₯Ό μ£Όκ³ μ‘°νν΄λ³΄λ TIMESTAMP νμμ test_timstamp κ°λ§ λ³ν κ²μ μ μ μμ΅λλ€.
- SET time_zone = '+01:00' : UTC+09:00 λ³΄λ€ 8μκ° μ΄μ μΌλ‘ μ€μ
μ΄λ μμμ κΈ°μ¬νλ― TIMESTAMP λ μμ€ν λ³μμΈ time_zoneμ κΈ°μ€μΌλ‘ κ²°κ³Όλ₯Ό λ°ννκΈ° λλ¬Έμ λλ€.
κ·Έλ κΈ°λλ¬Έμ TIMESTAMPλ₯Ό μ¬μ©νκ³ , λ‘컬 μκ°μ΄ λ€λ₯Έ κΈλ‘λ² μλΉμ€λ₯Ό μ΄μν λμλ μ΄λ₯Ό μ μν΄μ κ΄λ¦¬ν΄μΌν©λλ€.
TIMESTAMPλ₯Ό μ¬μ©νλ©΄ λ‘컬 μκ°μ λ°λΌ νΌλμ΄ μμ μλ μμΌλ, κΈλ‘λ² μλΉμ€λ₯Ό μ΄μν λμλ μ μ©νκ² μ°μΌ μ μμ΅λλ€.
λ§μ½ DATETIMEμ μ¬μ©νλ€λ©΄ λ‘컬 μκ°μ΄ μ λλ‘ λ°μλμ§ μμμ, μμΈμμ μ€μ 11μμ μμ±ν κΈμ λ―Έκ΅μμ μ‘°ννλ κ²½μ°, λμΌνκ² μ€μ 11μλ‘ λ°μλλ λ±μ λ¬Έμ κ° λ°μν©λλ€. μ΄λ κ² μκ°μ΄ λ€λ₯Έ μ§μμ΄ μλ κ²½μ°, TIMESTAMPκ° λ μ ν©ν μλ μμ΅λλ€.
μ΄λ¬ν νΉμ§λ€λ‘ DATETIMEμ μ λμ μΈ μκ° κΈ°λ‘μ μ ν©νκ³ TIMESTAMPλ μκ°λμ λ°λΌ λ³νμ΄ νμν κ²½μ° μ μ©νκ² μ°μ λλ€.
3) DATETIME κ³Ό TIMESTAMPμ μλ μ΄κΈ°ν
DATETIMEμ TIMESTAMPλ νμ¬ μΌμμ μκ°μ κΈ°λ³Έκ°, μλ μ λ°μ΄νΈ κ°μΌλ‘ μ€μ ν μ μμ΅λλ€.
- μλ μ΄κΈ°ν: λ°μ΄ν° μ½μ μ λͺ μμ μΌλ‘ μ§μ νμ§ μμλ νμ¬ νμμ€ν¬νλ‘ μ€μ
- μλ μ λ°μ΄νΈ: λ°μ΄ν° κ°±μ μ μλμΌλ‘ νμ¬ νμ μ€ν¬νλ‘ κ°±μ
μ€μ λ°©λ²
μλ μ΄κΈ°νμ μ λ°μ΄νΈλ₯Ό μ€μ νλ €λ©΄ DATETIMEκ³Ό TIMESTAMP μ΄ μ μμμ μ§μ ν΄μ£Όλ©΄ λ©λλ€.
- μλ μ΄κΈ°νλ₯Ό μν μ΄κΈ°κ° μ€μ : DEFAULT ~~
- μλ μ λ°μ΄νΈλ₯Ό μν μ€μ : ON UPDATE ~~
DATETIMEκ³Ό TIMESTAMPλ₯Ό κ°κ° νμμΌλ‘ κ°μ§λ columnμ΄ μλ ν μ΄λΈμ μλμ κ°μ΄ μ μνλ©΄ μλμΌλ‘ κ°μ΄ λ€μ΄κ°λλ€.
CREATE TABLE t1 (
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
μ ν μ΄λΈμ μ무 κ°λ μ§μ νμ§ μκ³ INSERTλ₯Ό νκ³ μ‘°νλ₯Ό νλ©΄,
insert into t1 values();
μ무 κ°λ λ£μ§ μμλλ°λ νμ¬ μκ°μ΄ μ μ₯λ κ²μ νμΈν μ μμ΅λλ€.
mysql> select * from t1;
+---------------------+---------------------+
| ts | dt |
+---------------------+---------------------+
| 2024-07-09 12:13:49 | 2024-07-09 12:13:49 |
+---------------------+---------------------+
1 row in set (0.00 sec)
μ΄λ²μ μλμ κ°μ ν μ΄λΈμ μμ±ν΄λ΄ μλ€.
CREATE TABLE t1 (
ts TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
dt DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
);
μμμ μ μν κ²κ³Ό λ€λ₯Έμ μ DEFAULT NULL λΆλΆμ λλ€.
μ΄λ κΈ°λ³Έκ°μ NULLλ‘ λκ² λ€λ κ²μ μλ―Έν©λλ€.
mysql> INSERT INTO t1 VALUES();
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM T1;
+------+------+
| ts | dt |
+------+------+
| NULL | NULL |
+------+------+
1 row in set (0.00 sec)
μμ λμΌνκ² μ무 κ°λ λ£μ§ μκ³ INSERTλ₯Ό νλ©΄, μ΄λ²μλ NULL κ°μ΄ μ μ₯λ κ²μ νμΈν μ μμ΅λλ€.
λ§μΉλ©°,
μλΉμ€λ₯Ό μ΄μνλ©΄ νμμ μΌλ‘ ν¬ν¨λλ λ μ§μ μκ° λ°μ΄ν°νμ λν λ΄μ©μ μ 리νμ΅λλ€.
νΉν DATETIMEκ³Ό TIMESTAMPμ μ°¨μ΄μμ ν·κ°λ¦¬λ λΆλΆμ΄ λ§μλλ°, μ΄λ²μ μ 리νκ³ μ°Ύμ보면μ νλ² λ νμΈν μ μμλ μκ°μ΄μμ΅λλ€. λ μ§ λ°μ΄ν°μ κ΄λ ¨ν΄μλ λ€μμ λ¬Έμμ΄λ‘ λ³ννλ λ± μ€μ λ‘ κ°μ μ‘°ννκ³ μ²λ¦¬νλ λΆλΆμ λν΄μ μμλ³΄κ² μ΅λλ€.
Reference
MySQL :: MySQL 8.4 Reference Manual :: 13.2.2 The DATE, DATETIME, and TIMESTAMP Types
13.2.2 The DATE, DATETIME, and TIMESTAMP Types The DATE, DATETIME, and TIMESTAMP types are related. This section describes their characteristics, how they are similar, and how they differ. MySQL recognizes DATE, DATETIME, and TIMESTAMP values in several f
dev.mysql.com
MySQL :: MySQL 8.4 Reference Manual :: 13.2.5 Automatic Initialization and Updating for TIMESTAMP and DATETIME
13.2.5 Automatic Initialization and Updating for TIMESTAMP and DATETIME TIMESTAMP and DATETIME columns can be automatically initialized and updated to the current date and time (that is, the current timestamp). For any TIMESTAMP or DATETIME column in a ta
dev.mysql.com
'π» Programming > SQL' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[SQL] μμ ν¨μ(MySQL, Oracle) (0) | 2024.07.08 |
---|