将created_at和updated_at添加到LOAD DATA INFILE数据

时间:2016-09-29 18:49:34

标签: mysql mariadb

我有一张表,我打算从CSV文件填充。该文件包含22列,表格包含24列。不同之处在于列列表末尾的created_atupdated_at字段。

我真正希望发生的是每条记录的创建以及最后两列的默认记录。

我添加了这样的列:

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的值创建两个日期。

1 个答案:

答案 0 :(得分:0)

...也许 Changelog for 10.0.1 跳到" MDEV-452",其中说:

  • MDEV-452完全支持自动初始化/更新的时间戳和日期时间
  • 对自动更新和/或自动初始化的时间戳和日期时间列的广义支持。这个补丁是MySQL" WL#5874:CURRENT_TIMESTAMP重新实现为DATETIME列的默认值"。为了简化将来的合并,这个实现重用了MySQL补丁中的一些函数和变量名,但是实现方式却完全不同。
  • TODO:此补丁中唯一未解决的问题是在存在缺失或NULL列的情况下,TIMESTAMP和DATETIME列的LOAD DATA的语义。我无法完全理解MySQL的行为背后的逻辑及其与自己文档的关系,因此我将结果与所有其他LOAD案例更加一致。
  • 通过运行测试文件function_defaults并观察测试用例差异,可以看到有问题的测试用例。这些都是故意讨论的。

如果您认为MariaDB仍然存在问题,请在那里提交错误。