使用MySQL 5.6。
我正在使用更新查询
UPDATE listtimeentry
SET quoteId = 5683,
lastAlteredQte="2020-04-10 11:06:14",
userIdQte=1112,
roleIdQte=10
WHERE soId = 2488 AND quoteId IS NULL;
告诉我0行受到影响,0行被匹配,所以没有任何更新。当我知道数据是什么并且知道应该受到某些影响时,这使我感到困惑。所以我用相同的条件做了一个SELECT
-
SELECT * FROM listtimeentry
WHERE soId = 2488 AND quoteId IS NULL;
这将返回4行给我。我的UPDATE
如何不影响任何事物,而具有相同条件的SELECT
则表明应该受到影响?关于此数据库的另一个事实是SQL_SAFE_UPDATES
已关闭。
[怎么回事,如何更改UPDATE
语句以影响SELECT
语句正在抓取的4行?
编辑:如果我运行选择查询,我会得到这个
id soId quoteId userIdQte roleIdQte lastAlteredQte
=======================================================
101 2488 NULL NULL NULL NULL
106 2488 NULL NULL NULL NULL
192 2488 NULL NULL NULL NULL
206 2488 NULL NULL NULL NULL
以及SHOW CREATE
陈述的相关部分
CREATE TABLE `listtimeentry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`soId` int(11) DEFAULT NULL,
`roleIdQte` int(11) DEFAULT NULL,
`userIdQte` int(11) DEFAULT NULL,
`lastAlteredQte` datetime DEFAULT NULL,
`lastAlteredAfterConfirmationQte` datetime DEFAULT NULL,
`notNeeded` int(11) DEFAULT NULL,
`qteNeeded` int(11) DEFAULT '0',
`quoteId` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `userIdQte` (`userIdQte`),
CONSTRAINT `listtimeentry_ibfk_3` FOREIGN KEY (`userIdQte`) REFERENCES `listusers` (`idx`)
) ENGINE=InnoDB AUTO_INCREMENT=118783 DEFAULT CHARSET=latin1;
listtimeentry
之后运行的表INSERT
有一个触发器
BEGIN
INSERT INTO `tab`.`listlineitems` SET
`listlineitems`.`itemId` = NEW.`id`,
`listlineitems`.`type` = 1;
END
编辑:关闭此。我的服务器出了点问题。我以某种方式通过SELECT语句获取了缓存的结果,但是当UPDATE尝试运行时,它失败了。我重新启动了MySQL 5.6 Server,一切正常。不过,我不知道是什么原因造成的。
当您运行UPDATE
语句时-MySQL不会更新新值与旧值相同的列。这可能会导致受影响的行数实际上可能不等于匹配的行数,而实际上仅等于该查询实际影响的行数。
如果需要,可以使用REPLACE
语句,该语句首先删除具有相同主键的记录,然后插入新行。