MariaDB CURRENT_TIMESTAMP デフォルト値を使いこなして、タイムスタンプ管理をマスターしよう

2024-04-02

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 は、INSERTUPDATE ステートメントで使用できます。
  • 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


データベースの海を泳ぎたい?全テーブル全フィールド検索の達人になろう!

このプログラムは、MySQLデータベースの全てのテーブルにあるフィールド内を検索し、指定された文字列を含むレコードを見つけるものです。プログラム構成ライブラリのインポートデータベースへの接続データベース内のテーブル名の取得各テーブルのフィールド名の取得...


日本の郵便番号をデータベースで扱う際の必須テクニック:MySQLでゼロパディングをマスター

このチュートリアルでは、MySQLを使用して、郵便番号の先頭に「0」を挿入する方法について説明します。以下の2つの方法があります。UPDATEステートメントを使用して、既存の郵便番号列を更新できます。以下は、zip_code列の先頭に「0」を挿入する例です。...


【保存版】MySQLの既存フィールド操作を極める!文字列追加でデータ分析の可能性を広げよう

ALTER TABLEコマンドを使用するこの方法は、テーブル構造を変更することで、既存のフィールドに新しい文字列列を追加します。具体的な手順は以下の通りです。例:このコマンドを実行すると、usersテーブルにaddressという新しいテキスト型のフィールドが追加されます。このフィールドは、emailフィールドの後に配置されます。...


トリガーで実現!MySQLにおける変更履歴の自動記録

ビンログを使用するMySQLは、すべてのデータ変更を記録するバイナリログ(binlog)をデフォルトで有効にします。このログは、データベースの復元やポイントインタイムリカバリに使用できます。方法SHOW BINARY LOGS;コマンドを実行して、使用可能なバイナリログファイルを表示します。...


【超便利】MySQL/MariaDBでDATETIME情報のタイムゾーンを一括変換!UPDATE、SELECT、ストアドプロシージャの使い分け

方法 1: UPDATE ステートメントを使用するUPDATE ステートメントを使用して、DATETIME エントリーのタイムゾーンを直接変更できます。この方法は、単一の列のタイムゾーンを変更する場合に便利です。例:この例では、my_table テーブルの my_datetime_column 列のすべてのエントリーが、現在のセッションのタイムゾーンから America/Los_Angeles タイムゾーンに変換されます。...


SQL SQL SQL SQL Amazon で見る



MariaDB vs MySQL: DATETIME 型のデフォルト値徹底比較

MariaDB の DATETIME 型のデフォルト値は、カラムが NOT NULL 属性で定義されているかどうかによって異なります。NOT NULL 属性が設定されていない場合: デフォルト値は NULL です。つまり、値が設定されていない場合は何も格納されません。