質問
同じ行のフィールドが変更されるたびに自動的に更新されるMySQLテーブルにタイムスタンプ列を定義することは可能ですか?理想的には、この列は最初に行が挿入された時間に設定する必要があります。
乾杯、 ドン
解決
これは、 timestamp 列タイプ。ただし、このタイプの形式はyyyymmddhhmmss(すべての数字、コロンまたはその他の区切りなし)であることに注意してください。
編集:上記の形式に関するコメントは、MySQL <!> lt;のバージョンにのみ当てはまります。 4.1 ...以降のバージョンは、 DateTime
のようにフォーマットします他のヒント
タイムスタンプ列は、前述の他のポスターとして使用できます。以下は、列を追加するために使用できるSQLです。
ALTER TABLE `table1` ADD `lastUpdated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
これにより、「lastUpdated」という列に現在の日付/時刻のデフォルト値が追加されます。そのレコードが更新されると(5分後など)、そのタイムスタンプは現在の時刻に自動的に更新されます。
これは私が観察したことです(MySql 5.7.11)-
テーブルの最初のTIMESTAMP列は、現在のタイムスタンプをデフォルト値として取得します。したがって、値を指定せずにINSERTまたはUPDATEを実行すると、列は現在のタイムスタンプを取得します。
後続のTIMESTAMP列には、デフォルト値が明示的に定義されている必要があります。 2つのTIMESTAMP列があり、2番目の列にデフォルト値を指定しない場合、テーブルの作成中にこのエラーが発生します-
エラー1067(42000): 'COLUMN_NAME'のデフォルト値が無効です
MySQLタイムスタンプは、デフォルト値が設定されている場合にのみ、作成時間または更新時間で設定されます。 ALTER TABLE some_table ADD when TIMESTAMP DEFAULT CURRENT_TIMESTAMP
。
それ以外は、DateTimeフィールドのように機能しますが、それは1970/01/01 UTCに対して相対的であるため、DateTimeのように特定のタイムゾーンに依存しない絶対的な時点です。
IIRC、タイプタイムスタンプのテーブルの最初の列は、レコードの作成時に設定され、変更できません。タイプタイムスタンプの2列目は、レコードが更新されるたびに設定されます。またはその逆。
MySQLの作業をあまり行っていないので、これを確認する必要があります。