MariaDB CURRENT_TIMESTAMP デフォルト値を使いこなして、タイムスタンプ管理をマスターしよう
MariaDB の CURRENT_TIMESTAMP
は、現在の日時を返す関数です。デフォルト値は、レコードが作成されたときと更新されたときの両方で、現在のタイムスタンプになります。
デフォルト値の動作
- 新しいレコードを作成すると、
CURRENT_TIMESTAMP
を使用してTIMESTAMP
またはDATETIME
型の列に自動的に値が挿入されます。
DEFAULT
キーワードを使用して、CURRENT_TIMESTAMP
以外のデフォルト値を設定できます。- 例:
CREATE TABLE my_table (
id INT NOT NULL AUTO_INCREMENT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
注意事項
CURRENT_TIMESTAMP
は、データベースサーバーの時計に基づいています。- サーバーの時計が不正確な場合、
CURRENT_TIMESTAMP
で返される値も不正確になります。 - 常に正確なタイムスタンプが必要な場合は、
CURRENT_TIMESTAMP
ではなく、UTC_TIMESTAMP
などの関数を使用することをお勧めします。
CURRENT_TIMESTAMP
は、DATETIME
型とTIMESTAMP
型の両方で使用できます。CURRENT_TIMESTAMP
は、INSERT
とUPDATE
ステートメントで使用できます。CURRENT_TIMESTAMP
は、ストアドプロシージャ内でも使用できます。
例
-- 新しいレコードを作成する
INSERT INTO my_table (name) VALUES ('John Doe');
-- レコードを更新する
UPDATE my_table SET name = 'Jane Doe' WHERE id = 1;
-- CURRENT_TIMESTAMP の値を取得する
SELECT CURRENT_TIMESTAMP();
CURRENT_TIMESTAMP
は、現在の日時を返す便利な関数です。デフォルト値は、レコードが作成されたときと更新されたときの両方で、現在のタイムスタンプになります。デフォルト値を変更したり、CURRENT_TIMESTAMP
をさまざまな方法で使用したりすることができます。
INSERT INTO my_table (name, created_at) VALUES ('John Doe', CURRENT_TIMESTAMP());
レコードを更新する
UPDATE my_table SET name = 'Jane Doe', updated_at = CURRENT_TIMESTAMP() WHERE id = 1;
CURRENT_TIMESTAMP の値を取得する
SELECT CURRENT_TIMESTAMP();
DEFAULT キーワードを使用してデフォルト値を変更する
CREATE TABLE my_table (
id INT NOT NULL AUTO_INCREMENT,
created_at TIMESTAMP DEFAULT '2024-03-21 03:50:00',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
UTC_TIMESTAMP を使用して正確なタイムスタンプを取得する
SELECT UTC_TIMESTAMP();
DELIMITER //
CREATE PROCEDURE my_procedure()
BEGIN
INSERT INTO my_table (name, created_at) VALUES ('John Doe', CURRENT_TIMESTAMP());
END //
DELIMITER ;
CALL my_procedure();
-- レコードが作成されたときのみ、CURRENT_TIMESTAMP を使用して値を設定する
INSERT INTO my_table (name, created_at) VALUES ('John Doe', CURRENT_TIMESTAMP());
-- レコードが更新されたときのみ、CURRENT_TIMESTAMP を使用して値を設定する
UPDATE my_table SET name = 'Jane Doe' WHERE id = 1;
-- CURRENT_TIMESTAMP を使用して、レコードの作成日時と更新日時を両方とも設定する
INSERT INTO my_table (name, created_at, updated_at) VALUES ('John Doe', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
CURRENT_TIMESTAMP とその他の関数との組み合わせ
-- CURRENT_TIMESTAMP と DATE_ADD() 関数を使用して、1 時間後のタイムスタンプを取得する
SELECT DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
-- CURRENT_TIMESTAMP と SUBTIME() 関数を使用して、1 時間前のタイムスタンプを取得する
SELECT SUBTIME(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);
上記のサンプルコードは、MariaDB の CURRENT_TIMESTAMP
関数を使用したさまざまな方法を示しています。これらの例を参考に、ご自身のニーズに合った方法で CURRENT_TIMESTAMP
を使用することができます。
MariaDB CURRENT_TIMESTAMP の代替方法
CREATE TABLE my_table (
id INT NOT NULL AUTO_INCREMENT,
created_at TIMESTAMP DEFAULT '2024-03-21 03:50:00',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
INSERT ステートメントで値を明示的に指定する
INSERT INTO my_table (name, created_at) VALUES ('John Doe', '2024-03-21 03:50:00');
UPDATE my_table SET name = 'Jane Doe', updated_at = '2024-03-21 03:50:00' WHERE id = 1;
NOW() 関数を使用する
-- 新しいレコードを作成する
INSERT INTO my_table (name, created_at) VALUES ('John Doe', NOW());
-- レコードを更新する
UPDATE my_table SET name = 'Jane Doe', updated_at = NOW() WHERE id = 1;
UTC_TIMESTAMP() 関数を使用する
-- 新しいレコードを作成する
INSERT INTO my_table (name, created_at) VALUES ('John Doe', UTC_TIMESTAMP());
-- レコードを更新する
UPDATE my_table SET name = 'Jane Doe', updated_at = UTC_TIMESTAMP() WHERE id = 1;
ストアドプロシージャ内で値を生成する
DELIMITER //
CREATE PROCEDURE my_procedure()
BEGIN
DECLARE created_at TIMESTAMP;
SET created_at = CURRENT_TIMESTAMP();
INSERT INTO my_table (name, created_at) VALUES ('John Doe', created_at);
END //
DELIMITER ;
CALL my_procedure();
上記の方法は、MariaDB の CURRENT_TIMESTAMP
関数を使用せずに、レコードの作成日時と更新日時を設定するための代替方法を示しています。これらの方法を参考に、ご自身のニーズに合った方法を選択することができます。
注意事項
DEFAULT
キーワードを使用してデフォルト値を設定する場合、値は単一引用符で囲む必要があります。INSERT
ステートメントまたはUPDATE
ステートメントで値を明示的に指定する場合、値は正しい形式で記述する必要があります。NOW()
関数とUTC_TIMESTAMP()
関数は、CURRENT_TIMESTAMP
関数と同様の動作をします。
mysql date default