2017-10-26 19 views
0

私はMySQLを使用していますTIMESTAMPカラムを持つテーブルを作成しました。各テーブルに現在の日付と時刻が追加されます。しかし、私はそのテーブルにデータを挿入するときにそれを初期化する方法を知らない。私のSQLクエリは、以下のとおりです。mysqlのタイムスタンプ列を自動的に初期化する方法

TABLE

"CREATE TABLE IF NOT EXISTS messages (mess_id int PRIMARY KEY AUTO_INCREMENT, mess_from int, mess_to int, mess_txt VARCHAR(20000), mess_time TIMESTAMP, FOREIGN KEY (mess_from) REFERENCES users(id),FOREIGN KEY (mess_to) REFERENCES users(id))"

INSERTION

"INSERT INTO user_messages (NULL,'"+data.from+"','"+data.to+"','"+data.text+"',DEFAULT)"

問題は、私はタイムスタンプ列を初期化する方法がわからない、です、私はNULLとを試しましたしかし、どちらも私にこの無効な構文のエラーを示しています。タイムスタンプフィールドを自動的に初期化します。それでおしまい。

+0

これは、MySQLの質問ですか?別の製品であるSQL Serverとは無関係のようです。また、緊急に[あなたのパラメータをエスケープする]必要があります(http://bobby-tables.com/)。 – tadman

+0

はいそれはmySql – Nadeem

答えて

1

は、以下のことを試してみてください。

は「(user_messages。INSERT INTO NULL、 ' "+ data.from +"'、 ' "+ data.to +"'、 ' "+ data.text +"'、今())」

よろしく

+0

はまだエラーを示しています – Nadeem

1

テーブルの作成時に、タイムスタンプ列の既定値をCURRENT_TIMESTAMPに設定します。

CREATE TABLE IF NOT EXISTS messages ( 
    mess_id int PRIMARY KEY AUTO_INCREMENT, 
    mess_from int, 
    mess_to int, 
    mess_txt VARCHAR(20000), 
    mess_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
    FOREIGN KEY (mess_from) REFERENCES users(id),FOREIGN KEY (mess_to) REFERENCES users(id)) 

EDIT:新しいレコードが挿入され、そのフィールドの明示的な値が含まれていない場合に は完全を期すため、これは現在のタイムスタンプにmess_timeフィールドを設定します。その行のUPDATEが発生しても効果はありません。すべての更新にタイムスタンプが「UPDATE CURRENT_TIMESTAMP ON」を使用して、現在のタイムスタンプに設定されるようにするには、INSERTを行う場合、タイムスタンプ列を指定しない

CREATE TABLE IF NOT EXISTS messages ( 
    mess_id int PRIMARY KEY AUTO_INCREMENT, 
    mess_from int, 
    mess_to int, 
    mess_txt VARCHAR(20000), 
    mess_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    FOREIGN KEY (mess_from) REFERENCES users(id),FOREIGN KEY (mess_to) REFERENCES users(id)) 

それを設定することができます。

INSERT INTO user_messages (mess_from,mess_to, mess_text) VALUES (@FromValue,@ToValue,@TextValue) 

(上記はすべての場合に有効ですが、current_timestampを挿入するためにNULLを使用できるかどうかを制御するシステム変数があります。これは標準ではなく、他のSQLエンジンとの互換性が低いため、標準モードに設定されることがあります。

変数はexplicit_defaです。 ults_for_timestampは、推奨されていませんし、これらの非標準的な行動は、将来のMySQLのバージョンで削除されるように設定されているので、私はそれを使用してお勧めしません)

+0

はまだ同じエラーがあります! – Nadeem

+0

申し訳ありませんが、私はINSERTステートメントに対処しませんでした。 –

+0

が編集されました。 INSERTステートメントは、タイムスタンプフィールドを除外する必要があります。 –

関連する問題