MySQL等价与更新

MySQL等价与更新,mysql,equivalence,Mysql,Equivalence,当通过UPDATE更新行时,如果UPDATE语句中设置的某些字段将保持而不是field='value',是否始终保证行“受影响” 这是否也意味着,对于具有常量字段值的任何两个直接连续的更新,第二个总是“影响”0行?是的,因为结果只显示sql查询中没有更改的行,所以第二个查询不会更改任何行,因为第一个查询已经完成,这两个计数都是正确的(虽然==运算符在MySQL中不存在——我假设您只是为了清楚起见才使用它) 受影响的行将只计算已更改的行。因此,如果没有更改任何字段,则不会影响任何内容。请注意,与查

当通过
UPDATE
更新行时,如果
UPDATE
语句中设置的某些字段将保持
而不是field='value'
,是否始终保证行“受影响”


这是否也意味着,对于具有常量字段值的任何两个直接连续的
更新
,第二个总是“影响”0行?

是的,因为结果只显示sql查询中没有更改的行,所以第二个查询不会更改任何行,因为第一个查询已经完成,这两个计数都是正确的(虽然==运算符在MySQL中不存在——我假设您只是为了清楚起见才使用它)

受影响的行将只计算已更改的行。因此,如果没有更改任何字段,则不会影响任何内容。请注意,与查询中实际使用的比较不同,已更改的比较区分大小写

编辑:

对于UPDATE语句,默认情况下受影响的行数值是实际更改的行数。如果在连接mysqld时将CLIENT_FOUND_rows标志指定为mysql_real_connect(),则受影响的行数值是“找到”的行数;也就是说,由WHERE子句匹配

我正在寻找MySQL如何决定什么构成“实际更改”或不“更改”的链接。根据措辞,很明显,假设它们的意思是,只有在二进制级别上前后值不相等的情况下,才会将其视为实际更改


如果不深入研究源代码,我可能无法证明这一点。

我还想到了几个与类型转换相关的问题。。例如,我可以想象,一个具有日期分辨率的日期可能等于同一天的
DATETIME
,但是
UPDATE
会通过将时间设置为0:00:00来影响行在所有这些可能的转换(stringsnumberstimes)中,我现在有一种不好的感觉,我的第一个语句的答案是“否”。这将引出另一个问题:如何知道
UPDATE
语句中使用的某些给定数据是否会影响行而不实际执行它?