4

mysql でバグに遭遇した可能性があると思います。

過去 4 か月間、同じ特定のクエリを使用してきましたが、今日、何らかの理由で機能しなくなりました。問題がわかりません。

これらのクエリをmysqlコンソールで実行していますが、うまく機能し、フィールドが更新されています。しかし、これらのクエリが PHP によって実行されている場合、失敗します。

(2 つのタイムスタンプ フィールドを持つ) テーブルにレコードを挿入した後、特定のタイムスタンプ列を更新しようとしています。

残念ながら、列の更新に失敗します。

クエリは正常に実行されますが (エラーは発生しません)、タイムスタンプ列の値は変わりません。奇妙なことに、最初の列の値を NULL のままにしておくと、更新クエリが成功します。

列 :

START_DATETIME, END_DATETIME - are "timestamp" type.

入れる:

INSERT INTO TABLE1(START_DATETIME, END_DATETIME, RESPONSE) 
VALUES(NOW(), NOW(), 'STARTED')

正常に挿入されました。IDは123です

更新クエリは、他のクエリと同様に正常です。

UPDATE TABLE1 
SET END_DATETIME = NOW(), RESPONSE='ENDED'
WHERE ID = 123

更新に失敗し、値END_DATETIMEを取得できませんNOW()

これで再現できます:

CREATE TABLE TABLE1 
(
    id int auto_increment, 
    start_datetime timestamp, 
    end_datetime timestamp, 
    response varchar(100), 

    primary key(id)
);
4

3 に答える 3

2

これをさらに調べた後、最初のテーブルに ON UPDATE CURRENT_TIMESTAMP がある場合、2番目のレコードへの更新によって自動的に設定されるため、これが予想されます。

これが以前は機能していたとは思えません。

それを修正するには:

ALTER TABLE TABLE1
    CHANGE COLUMN start_datetime start_datetime TIMESTAMP NULL DEFAULT NULL AFTER id,
    CHANGE COLUMN end_datetime end_datetime TIMESTAMP NULL DEFAULT NULL AFTER start_datetime;

日時の値が必要な場合、TIMESTAMP データ型は現在の日付と時刻への自動初期化と更新を提供するため、値の自動更新に役立つため、TIMESTAMP はこれにはあまり適していません。詳細については、TIMESTAMP の自動初期化と更新を参照してください。

自分で管理できるフィールドが必要な場合は、他のタイプのいずれか

  • 日にち
  • 日付時刻

11.3.1を参照してください。DATE、DATETIME、および TIMESTAMP 型

于 2012-07-02T08:30:42.123 に答える
0

これはタイムスタンプ型の問題です。両方の列を日時に変更すると、期待どおりの結果が得られます

于 2012-07-02T08:57:17.213 に答える