我有一个如下所示格式的 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 字段。
这是查询:
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 |
+------------+-------------+------+-----+-------------------+-----------------------------+
最佳答案
event_time
列可能使用类型 TIMESTAMP
进行声明。 。当插入或更新行时,这种类型的列被设置为当前时间。
考虑使用DATETIME
来代替。
关于MySQL更新语句造成副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133880/