添加 created_at 和 updated_at 到 LOAD DATA INFILE 数据

Adding created_at and updated_at to LOAD DATA INFILE data

我有一个 table 计划从 CSV 文件中填充。该文件包含 22 列,而 table 包含 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.

的值创建

也许…… Changelog for 10.0.1 跳到 "MDEV-452",上面写着:

  • MDEV-452 添加对 auto-initialized/updated 时间戳和日期时间
  • 的完全支持
  • 对自动更新and/or 自动初始化时间戳和日期时间列的普遍支持。此补丁是 MySQL 的 "WL#5874: CURRENT_TIMESTAMP as DEFAULT for DATETIME columns" 的重新实现。为了简化未来的合并,此实现重用了 MySQL 补丁中的一些函数和变量名称,但实现方式却大不相同。
  • TODO:此补丁中唯一未解决的问题是在缺少列或 NULL 列的情况下 TIMESTAMP 和 DATETIME 列的 LOAD DATA 语义。我无法完全理解 MySQL 行为背后的逻辑及其与他们自己的文档的关系,因此我保留了与所有其他 LOAD 案例更加一致的结果。
  • 有问题的测试用例可以通过运行测试文件function_defaults查看,观察测试用例的差异。那些是故意留下来讨论的。

如果您觉得 MariaDB 仍然存在问题,请在此处提交错误。