查询更新更新列表中未提及的时间戳列

Posted

技术标签:

【中文标题】查询更新更新列表中未提及的时间戳列【英文标题】:query updating a timestamp column not mentioned in list of updates 【发布时间】:2017-05-30 13:13:33 【问题描述】:

我只想更新数据库中的一列,但由于某种原因,我的 mysql 查询也更新了另一列。

我的代码看起来有点像这样:

$sql = "UPDATE rackusage set totalDuration =".$timeDiff." where (rackID = '".$rackID."' and startTime LIKE '%".$getStartTime."%');";
            echo "<br>";
            echo $sql;
            echo "<br>";
            $res = mysql_query($sql);

它在 php.ini 中。 我只想更新总 Duration 列,但由于某种原因,startTime 列也会更新。 输出字符串如下所示:

UPDATE rackusage set totalDuration =30 where (rackID = '2' and startTime 
LIKE '%2017-05-30 18:34:36%');

这是生成的数据库:

【问题讨论】:

请使用准备好的语句,不要使用mysql函数。使用 MYSQLi 或 PDO 为什么 where 子句有括号? 您的图片不支持您的问题。但除了 startTime 上的通配符(不必要)之外,查询看起来是正确的。 您是否设置了默认值startTime,它会在每次执行时更新该列。 我猜你的意思是多行而不是多列。图片中的所有行都与您的 WHERE 子句匹配:它们都有 rackID = 2 并且它们都具有相同的时间。 【参考方案1】:

您的startTime 列似乎是这样定义的。

startTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

更改您的UPDATE 查询以包含SET startTime = startTime,您将击败默认的ON UPDATE 部分。像这样的东西应该可以解决问题。

UPDATE rackusage set  startTime = startTime, totalDuration =".$timeDiff."  ...

【讨论】:

你的权利!非常感谢!这就是问题所在!该死。非常感谢:)【参考方案2】:

如果 O.Jones 是正确的并且您不想更新列 statTime 的值,您可以在您的数据库上处理此语句:

ALTER TABLE rackusage 
CHANGE `startTime` `startTime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

【讨论】:

酷 :) 谢谢 :)

以上是关于查询更新更新列表中未提及的时间戳列的主要内容,如果未能解决你的问题,请参考以下文章

更新时间戳列

使用 SSIS 在 DB2 表中设置时间戳列

如何根据 jsonb 列中的 unix 整数设置 postgres 时间戳列?

SQL 查询:如何在排名列值中使用时间戳列

按查询对时间戳列排序非常慢

如何使用内容提供程序在 Sqlite 数据库中查询 Android 中的时间戳列?