sql >> データベース >  >> RDS >> Mysql

MySQLの2列のタイムスタンプのデフォルトのNOW値ERROR1067

    1つしか持てません デフォルトがCURRENT_TIMESTAMPのタイムスタンプ列 またはNOW() テーブルごと。これはMySQLのよく知られたバグです。

    これを克服するには、作成した列のデフォルトを有効なタイムスタンプ値にしてから、CRUDアプリケーションコードにタイムスタンプを挿入します。NOW()を使用します。 またはCURRENT_TIMESTAMP 更新された列のデフォルト。

    参考資料: http://dev.mysql.com/doc/ refman / 5.1 / en / timestamp.html

    この分野でのMySQLの欠点をさらに説明するために、次のコードを検討してください。

    CREATE TABLE testing_timestamps (
      id INT NOT NULL AUTO_INCREMENT,
      pk_id INT NOT NULL,
      col1 TIMESTAMP DEFAULT 0,
      col2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY(id)
    );
    
    delimiter $$
    CREATE TRIGGER testing_timestamps_trigger
      AFTER INSERT ON testing_timestamps
      FOR EACH ROW 
      BEGIN
        UPDATE testing_timestamps SET col1 = NOW() WHERE id = MAX(id);
      END;
    $$
    delimiter ;
    
    INSERT INTO testing_timestamps (id) VALUES (0);
    

    これからの出力は次のように表示されます:

    mysql> INSERT INTO testing_timestamps (id) VALUES (0);
    ERROR 1442 (HY000): Can't update table 'testing_timestamps' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
    

    この場合にトリガーを使用すると適切な回避策になるため、これは残念です。



    1. 計画コストの問題点を説明する

    2. 日時の挿入中に文字列から日付や時刻を変換すると変換に失敗しました

    3. SQLステートメントでパーセンテージを計算する方法

    4. T-SQLで2つの日付の差を計算する方法