2016-09-29 61 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仍存在问题,请在那里提交错误。