MySQL - 使用datetime和timestamp字段批量插入数据

时间:2013-10-22 16:51:14

标签: mysql

所以,我正在玩一个试图学习MySQL的数据库。我有一个脚本在一起创建一个数据库,我不是试图批量填充数据。除了我的日期时间和时间戳字段外,一切似乎都很好。

以下是我遇到问题的表格:

DROP TABLE IF EXISTS TestMsgs;
CREATE TABLE TestMsgs (
    msg_id int NOT NULL AUTO_INCREMENT, 
    user_id int,
    content varchar(200), 
    time_submitted datetime,
    last_update timestamp,
    PRIMARY KEY (msg_id)
) ENGINE=INNODB;

因此,我想在添加记录时手动设置日期时间,然后在每次更新记录时自动更新时间戳。

当我尝试批量填充以下数据时:

LOAD DATA LOCAL INFILE "testmsgs.txt" REPLACE INTO TABLE TestMsgs
    FIELDS TERMINATED BY '|' (user_id, content, time_submitted);

content of testmsgs.txt:
    1|test1|10/22/2013 10:30
    1|test2|10/22/2013 10:31
    1|test3|10/22/2013 10:32

我得到以下结果:

+----------+---------+---------+---------------------+-------------+
|  msg_id  | user_id | content | time_submitted      | last_update |
+----------+---------+---------+---------------------+-------------+
|        1 |       1 | test1   | 0000-00-00 00:00:00 | NULL        |
|        2 |       1 | test2   | 0000-00-00 00:00:00 | NULL        |
|        3 |       1 | test3   | 0000-00-00 00:00:00 | NULL        |
+----------+---------+---------+---------------------+-------------+

是什么给出的?这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

MySQL的TIMESTAMP / DATETIME格式为YYYY-MM-DD HH:MM:SS。你正在做MM/DD/YYYY HH:MM,所以MySQL没有第一个线索如何处理它。您需要使用MySQL的STR_TO_DATE函数进行转换。

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

答案 1 :(得分:0)

请注意@ceejayoz所说的日期时间和时间戳字段的正确格式。

要使您的时间戳字段按您希望的方式工作,您需要将last_update字段定义更改为如下所示:

last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

DEFAULT CURRENT_TIMESTAMP定义提供记录创建的当前时间戳。 ON UPDATE CURRENT_TIMESTAMP定义提供了更新记录更改时间戳的功能。