31

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

乾杯、ドン

4

4 に答える 4

47

言及されている他のポスターと同様に、タイムスタンプ列を使用できます。列を追加するために使用できる SQL は次のとおりです。

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

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

于 2008-09-30T21:06:43.787 に答える
23

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

編集:フォーマットに関する上記のコメントは、MySQL <4.1のバージョンにのみ当てはまります...それ以降のバージョンは、DateTimeのようにフォーマットします

于 2008-09-30T20:56:14.530 に答える
2

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

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

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

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

于 2016-03-14T00:38:43.627 に答える
1

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

于 2010-11-15T22:12:48.130 に答える