MySQL更新语句造成副作用

标签 mysql sql

我有一个如下所示格式的 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/

相关文章:

PHP插入数据库不工作

c# - 始终不一致的 MySQL 查询结果 - 返回 0 行与 n 行

mysql - 选择与另一列的值匹配的列值

sql - 为什么交叉应用会使查询变慢?

php - 当值为 null 时查询出现问题

sql - SQL Server中如何生成随机数据

sql - 从字符串动态 sql 转换日期和/或时间时转换失败

javascript - 什么是正确的方法?使用 javascript 和 mysql

mysql - 如何在我的数据库中用 & 符号替换 &?

php - 如何将自托管的 wordpress 和 live 站点的已安装插件升级到最新可用版本而不会遇到任何问题?