2016-09-29 40 views
0

私はCSVファイルから作成する予定のテーブルを持っています。ファイルには22列が含まれ、表には24が含まれています。相違点は列リストの末尾にcreated_atupdated_atフィールドです。LOAD DATA INFILEデータにcreated_atとupdated_atを追加する

実際に起こりたいのは、各レコードを作成し、最後の2列をデフォルトにすることです。

ので、同様に、私は列を追加しました:

ALTER TABLE mytable 
    ADD created_at DATETIME DEFAULT CURRENT_TIMESTAMP, 
    ADD updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 
; 

マイローダースクリプトは次のようになります。

LOAD DATA LOCAL INFILE '/tmp/my.csv' 
    REPLACE INTO TABLE mytable 
    CHARACTER SET utf8 
    FIELDS TERMINATED BY ',' 
      OPTIONALLY ENCLOSED BY '"' 
    IGNORE 1 LINES 
; 

私が好きな何か、もちろん、取得するcreated_atupdated_at値のためであります新しいレコードが挿入されたときに設定されます。レコードが交換された場合は、updated_atの値を置き換える必要がありますか?

可能ですか?私はMariaDB 10.0.26を使用しており、両方の日付は常に0000-00-00 00:00:00という値で作成されています。おそらく、

+0

'TIMESTAMP'の' DEFAULT'の正確な規則を確認してください。彼らはバージョンを変更しました。 –

+0

'ENGINE = InnoDB'ですか? –

+0

@RickJames:ええ、私は正しい場所から読んでいて、適切なバージョンを用意しています。私はいくつかのニュアンスが欠けていると思っています(または見た目は分かりませんが)。まだ見つけられていません。 –

答えて

0

... Changelog for 10.0.1 はそれが言う "MDEV-452"、までスキップ:

  • MDEV-452は、自動初期化/更新されたタイムスタンプと日時
  • 一般化支援のための完全なサポートを追加します。自動更新および/または自動初期化のタイムスタンプおよび日付/時刻の列。このパッチは、MySQLの「WL#5874:CURRENT_TIMESTAMP DEFAULT DATETIME列」の再実装です。将来のマージを容易にするために、この実装では、MySQLのパッチから関数と変数名をほとんど再利用しませんでしたが、実装は全く異なります。
  • TODO:このパッチで解決されていない唯一の問題は、欠落している列またはNULL列がある場合のTIMESTAMP列とDATETIME列のLOAD DATAのセマンティクスです。私は、MySQLの動作の背後にある論理とそれぞれのドキュメントとの関係を完全に理解することができなかったので、他のすべてのLOADの場合とより一貫性のある結果を残しました。
  • 問題のあるテストケースは、テストファイルfunction_defaultsを実行し、テストケースの違いを観察することで確認できます。それらは議論のために意図的に残されました。

まだMariaDBに問題があると思われる場合は、そこにバグを報告してください。

関連する問題