Mysql 更新查询条件不工作的毫秒差异
我有工作更新查询Mysql 更新查询条件不工作的毫秒差异,mysql,Mysql,我有工作更新查询 UPDATE contact SET ownerid = '1548' , alloted = '1' , genby = '1548' , leadstatus = '-34-,' , callbackdate = '2019-09-25' , read = '0' WHERE id = '22484307' AND alloted = '0' AND leadsource = '29' A
UPDATE contact
SET ownerid = '1548'
, alloted = '1'
, genby = '1548'
, leadstatus = '-34-,'
, callbackdate = '2019-09-25'
, read = '0'
WHERE id = '22484307'
AND alloted = '0'
AND leadsource = '29'
AND `delete` = '0'
AND ownerid = '0'
AND oldlead != '1'
但当两个用户同时(大约)更新此查询时,条件停止工作
2019-09-25T09:12:27.211547+05:30 9688978 Query UPDATE `contact` SET `ownerid` = '1548',`alloted` = '1',`genby` = '1548', `leadstatus` = '-34-,', `callbackdate` = '2019-09-25', `read` = '0' WHERE `id` = '22484307' AND `alloted` = '0' AND `leadsource` = '29' AND `delete` = '0' AND `ownerid` = '0' AND `oldlead` != '1'
2019-09-25T09:12:27.400647+05:30 9689052 Query UPDATE `contact` SET `ownerid` = '1535',`alloted` = '1',`genby` = '1535', `leadstatus` = '-34-,', `callbackdate` = '2019-09-25', `read` = '0' WHERE `id` = '22484307' AND `alloted` = '0' AND `leadsource` = '29' AND `delete` = '0' AND `ownerid` = '0' AND `oldlead` != '1'
它用相同的id再次更新,并用毫秒差替换数据。这里是日志
全屏截图
我只是在检查查询执行状态未受影响状态添加已解决的问题感谢所有时间
mysqli\u受影响的行($con)
谢谢@Solarflare
$updateStatus=mysqli_query($con,"UPDATE `contact` SET `ownerid` = '$loggeduserid',`alloted` = '1',`genby` = '$loggeduserid', `leadstatus` = '-34-,', `callbackdate` = '$date', `read` = '0' WHERE `id` = '$row[0]' AND `alloted` = '0' AND `leadsource` = '$leadS' AND `delete` = '0' AND `ownerid` = '0' AND `oldlead` != '1'") or die(mysqli_error($con));
if(mysqli_affected_rows($con) AND $updateStatus)
{
}
我假设您的日志显示了客户执行/发送的查询。这并不意味着它成功地更新了行。MySQL将响应已更改的行数,您可能需要检查/记录这一点。您的更新更改了
ownerid
,并且条件包括ownerid=0
,因此这些更新中只有一个应该实际更改某些内容。如果两者都实际更新,请澄清这一点。如果您的应用程序应发送该请求/是否应该/能够显示/接收错误将取决于您的应用程序(例如,更新前锁定/检查响应,如果未更新行则抛出错误),则第二个应用程序将替换以前的更改。这些查询由两个不同的用户同时执行。我不知道为什么row lock不起作用@solarflareho您是如何验证这两个查询实际上在哪里更新的?这将是服务器中的一个bug,您不太可能遇到这种情况,因为这是MySQL工作原理中非常基本且经过良好测试的功能。相反,我可以想象,您的日志(它们来自哪里?)与服务器实际执行查询的顺序不符(例如,无法保证跨不同的连接),因此您可以假设,由于当前值为1535,因此第一个日志(将其设置为1548)也已执行,但可能没有执行。您能验证一下吗?Owner\u id发生了变化,所以我不明白您所说的a)停止工作
,b)此查询被更新
我正在运行一个insert查询,在另一个表中每次更新之后,我都会使用它们之间的关系授予第二个查询,以替换以前的Owner id