在存储例程中运行更新查询之后:
Update table1 set value='a' where id=1
如果该表已经具有相同的行(id = 1和value ='a'),我将收到以下消息:
受影响的0行,匹配的行:1已更改:0警告:0
当我检查ROW_COUNT()
时,它返回0,因为它返回了受影响的行。
因此,是否有一种方法可以使用与ROW_COUNT()
类似的方式(或其他任何脚本方式)来知道是否存在匹配的行?
答案 0 :(得分:1)
ROW_COUNT()
默认情况下获取受影响的行数。但是您可以通过帮助mysql_real_connect()
来更改此行为。如果将其设置为CLIENT_FOUND_ROWS
,则可以获得已创建的行数。
答案 1 :(得分:1)
您可以直接使用mysql_sysinfo()
访问相同的操作摘要。
另一种解决方案是在表中添加一列,当您运行语句时,该列将始终更新。因此,即使value
列不变,您的行也总是会受到影响,因为其他列也会改变。
它可能是一个时间戳列,您将更新为NOW()
,例如:
update table1 set value = 'a', my_timestamp = NOW() where id=1;
或者是您自动递增的整数列:
update table1 set value = 'a', my_revision = my_revision + 1 where id=1;
答案 2 :(得分:0)
这样看-两个SQL语句几乎总是比一个慢。
让我们剖析IODKU:
对:
选择计数(*):
存在(选择1 ...)
插入
更新
WHERE
子句查找记录-可能与上述BTree向下钻取相同。注意IODKU的情况
顺便说一句,REPLACE
是一个可怜的亲戚: