2016-09-29 19 views
0

我有一張表,我打算從CSV文件填充。該文件包含22列,表中包含24個。差異是列列表末尾的created_atupdated_at字段。將created_at和updated_at添加到LOAD DATA INFILE數據

我真正想要發生的是創建每個記錄併爲最後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 for DATETIME列」的重新實現。爲了簡化未來的合併,這個實現重用了來自MySQL補丁的一些函數和變量名稱,但是實現方式有很大不同。
  • TODO:此修補程序中唯一未解決的問題是TIMESTAMP和DATETIME列的LOAD DATA在缺少列或NULL列的情況下的語義。我無法完全理解MySQL的行爲背後的邏輯及其與他們自己的文檔的關係,所以我將結果與所有其他LOAD案例保持一致。
  • 有問題的測試用例可以通過運行測試文件function_defaults和觀察測試用例差異來看到。這些留在討論的目的。

如果您覺得MariaDB仍存在問題,請在那裏提交錯誤。