【发布时间】:2018-08-20 20:58:00
【问题描述】:
我有一个如下格式的 MySQL 表:
mysql> select event_time, count, result, pcm_id from Events_CallMeBack_2011_08_05 WHERE pcm_id=1566;
+---------------------+-------+--------+--------+
| event_time | count | result | pcm_id |
+---------------------+-------+--------+--------+
| 2011-08-05 23:45:04 | 0 | NULL | 1566 |
+---------------------+-------+--------+--------+
1 row in set (0.00 sec)
问题是,当我运行 UPDATE 查询修改结果列时,event_time 也被更新为副作用。我不知道为什么会这样:当我尝试更新结果列时,我当然不希望更新 event_time 字段。
这是查询:
UPDATE Events_CallMeBack_2011_08_05 SET result ='D' WHERE pcm_id = '1566'
这是运行 UPDATE 语句后的结果列。
mysql> select event_time, count, result, pcm_id from Events_CallMeBack_2011_08_05 WHERE pcm_id=1566;
+---------------------+-------+--------+--------+
| event_time | count | result | pcm_id |
+---------------------+-------+--------+--------+
| 2011-08-20 19:40:21 | 0 | D | 1566 |
+---------------------+-------+--------+--------+
1 row in set (0.00 sec)
event_time 列已更新为 mysql 服务器的当前本地时间。
我的初步分析是 mysql 会自动更新 Update 语句上的 event_time (TIMESTAMP) 列。 CREATE TABLE 语句没有指定这一点,所以我不知道为什么会发生这种情况。
创建语句:
strSql = "CREATE TABLE " + strTableName +
"(id INT NOT NULL, event_time TIMESTAMP,....
表格如下所述。
mysql> describe Events_CallMeBack_2011_08_05;
+------------+-------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+-------------------+-----------------------------+
| id | int(11) | NO | | NULL | |
| event_time | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| event_code | varchar(30) | YES | | NULL | |
| count | int(11) | YES | | 0 | |
| result | varchar(1) | YES | | NULL | |
| pcm_id | int(11) | NO | PRI | NULL | auto_increment |
+------------+-------------+------+-----+-------------------+-----------------------------+
【问题讨论】:
-
@Shef:这不是默认值的问题;更新期间不考虑列的默认值,只考虑插入。
-
@Shef event_time 确实设置为 CURRENT_TIMESTAMP。我已经用表结构和 CREATE TABLE 语句更新了我的问题。我应该如何修改我的 CREATE 语句来解决这个问题。
-
@cdhowie:我的意思是
TIMESTAMP列的默认值。由于我无法编辑,因此删除了评论以避免混淆。 @user840055:问题已经回答了,把event_time栏改成DATETIME类型(即event_time DATETIME)。