当通过UPDATE更新行时,是否始终保证该行受到“影响”,并且只有在那时,UPDATE语句中设置的一些字段才会包含NOT field='value'?
这是否也意味着,对于任何两个具有恒定字段值的直接顺序UPDATE,第二个总是“影响”0行?
发布于 2012-03-22 17:58:35
是,因为结果仅显示sql查询中更改的行数,因此第二个查询不会更改任何行,因为第一个查询已经完成
发布于 2012-03-22 17:58:37
在这两个方面都是正确的(尽管MySQL中不存在==运算符--我假设您只是为了清楚起见而使用它)。
受影响的行将仅计算已更改的行数。因此,如果所有字段都未更改,则不会受到任何影响。请注意,此changed比较区分大小写,与查询中实际使用的比较不同。
编辑:http://dev.mysql.com/doc/refman/5.1/en/mysql-affected-rows.html
对于UPDATE语句,
-rows值默认情况下是实际更改的行数。如果在连接到mysqld时为mysql_real_connect()指定了CLIENT_FOUND_ROWS标志,那么mysql_real_connect-rows值就是“找到”的行数;也就是说,与WHERE子句匹配。
我正在寻找一个链接,关于MySQL如何决定哪些协议‘实际’改变了。根据措辞,很明显,他们的意思是,只有当之前和之后的值在二进制级别上不相等时,它才会被视为实际更改。
如果不深入源代码,我可能无法证明这一点。
https://stackoverflow.com/questions/9819834
复制相似问题