web-dev-qa-db-ja.com

mysqlタイムスタンプ列

同じ行のフィールドが変更されるたびに自動的に更新されるMySQLテーブルにタイムスタンプ列を定義することは可能ですか?理想的には、この列は最初に行が挿入された時刻に設定する必要があります。

乾杯、ドン

27
Dónal

これは、timestamp列タイプのデフォルトの機能です。ただし、このタイプの形式はyyyymmddhhmmss(すべて数字、コロンまたはその他の区切り文字)であることに注意してください。

EDIT:形式に関する上記のコメントは、MySQL <4.1のバージョンにのみ当てはまります...以降のバージョンでは、DateTime

20
Adam Bellaire

タイムスタンプ列は、他の投稿者と同じように使用できます。以下は、列を追加するために使用できるSQLです。

ALTER TABLE `table1` ADD `lastUpdated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;

これにより、現在の日付/時刻のデフォルト値を持つ「lastUpdated」という列が追加されます。そのレコードが更新されると(5分後に言います)、そのタイムスタンプは自動的に現在の時刻に更新されます。

39
quickcel

これは私が観察したものです(MySql 5.7.11)-

テーブルの最初のTIMESTAMP列は、現在のタイムスタンプをデフォルト値として取得します。したがって、値を指定せずにINSERTまたはUPDATEを実行すると、列は現在のタイムスタンプを取得します。

後続のTIMESTAMP列には、明示的に定義されたデフォルト値が必要です。 2つのTIMESTAMP列があり、2番目の列にデフォルト値を指定しない場合、テーブルを作成しようとするとこのエラーが発生します-

エラー1067(42000):「COLUMN_NAME」のデフォルト値が無効です

2
Do Will

MySQLタイムスタンプは、デフォルト値が設定されている場合にのみ、作成時間または更新時間で設定されます。 ALTER TABLE some_table ADD when TIMESTAMP DEFAULT CURRENT_TIMESTAMP
それ以外は、DateTimeフィールドと同じように機能しますが、それは1970/01/01 UTCを基準にしているため、DateTimeのように特定のタイムゾーンに依存しない絶対的な時点です。

0
Petruza