問題を再現するために、
この記事を書く前に、MySQLの、MariaDBの私のバージョンをクリアするか、MySQLの8を使用する場合、問題があるでしょう
さて、このような需要がある、テーブルには、このレコードを記録フィールドのcreated_atの作成タイムスタンプ、およびタイムスタンプの更新を記録したレコードupdated_atの別のフィールドがあります。
私たちは、次の文を作成してみてください。
表TEMP CREATE ( ID INTを(11 )PRIMARY KEY AUTO_INCREMENT、 名前VARCHAR(10 ) のcreated_atタイムスタンプNULLデフォルトCURRENT_TIMESTAMP、 UPDATE CURRENT_TIMESTAMP ONタイムスタンプNULLデフォルトCURRENT_TIMESTAMP updated_atの )。
エラーを実行した後:
报ERROR 1293(HY000)错误(完整错误信息:ERROR 1293(HY000):不適切なテーブル定義。)DEFAULTまたはONのUPDATE句にCURRENT_TIMESTAMPを持つ唯一のTIMESTAMP列が存在することができます
ソリューション
まず、デフォルトのCURRENT_TIMESTAMPまたはDEFAULTを使用してのcreated_at()、およびトリガーを使用updated_atの。
表TEMP CREATE ( ID INTを(11 )PRIMARY KEY AUTO_INCREMENT、 名前VARCHAR(10 ) のcreated_atタイムスタンプNULLデフォルトCURRENT_TIMESTAMP、 タイムスタンプNULL updated_atの )。
レコード更新時の更新を実現し、一時にトリガを作成
区切り文字| DROP TRIGGER IFはtri_temp_updated_atをEXISTS。 一時ON更新前トリガtri_temp_updated_atをCREATE EACH行については、 BEGIN SET NEW.updated_at = NOW()を。 終わり; | 区切り文字;
ソリューション2
第二に、(今UPDATE ON)(現在UPDATE CURRENT_TIMESTAMPまたはDEFAULTのデフォルトのCURRENT_TIMESTAMPを使用updated_atの、トリガーを使用してのcreated_at)。
表TEMPをCREATE ( IDのINT(11 )PRIMARY KEY AUTO_INCREMENT、 名前VARCHAR(10 ) のcreated_atタイムスタンプNULL、 UPDATE CURRENT_TIMESTAMP ONタイムスタンプNULLデフォルトCURRENT_TIMESTAMP updated_atの )。
一時にトリガーを作成し、レコードの挿入データの作成時間を達成
区切り文字| DROP TRIGGER IFはtri_temp_created_atをEXISTS。 INSERT ONの一時BEFOREトリガーのtri_temp_created_atをCREATE EACH ROW FORは BEGIN のIF 新しい.created_atがNULL IS THEN SET 新しい = .created_atを今(); END IF; 終わり; | 区切り文字;
第三ソリューション
第三种、指定のcreated_atタイムスタンプDEFAULT '0000-00-00 00:00:00'、今UPDATE ON今UPDATE CURRENT_TIMESTAMP或者タイムスタンプDEFAULT ON指定のDEFAULT CURRENT_TIMESTAMP()updated_atの()。
表TEMP CREATE ( IDのINT(11 )PRIMARY KEY AUTO_INCREMENT、 名前VARCHAR(10 ) のcreated_atタイムスタンプNULLデフォルト' 0000-00-00 00:00:00 ' 、 UPDATE CURRENT_TIMESTAMP ONタイムスタンプNULLデフォルトCURRENT_TIMESTAMP updated_atの )。
データを挿入します。
MySQLの> TEMP(名前、のcreated_at、updated_atの)\。INSERT INTO VALUES(' ロビン' 今、)(今、()); クエリOK、1つの影響を受けた行(0.01 秒) のMySQL > TEMP INTO(名前、のcreated_at、updated_atの)\ INSERT (VALUES ' wentasy ' 今すぐに、()())。 クエリOK、1つの影響を受けた行(0.01秒)
ソリューション4
第四に、MySQLのは、MySQL 5.6の代替バージョンでは、この制限を削除しました。
私たちは、この質問に説明するのMySQL 5.5および5.6ヘルプドキュメントを見ることができます。