是否有可能mysql无法更新某些数据?

时间:2011-03-11 20:58:34

标签: php mysql

好的,我们假设有两行:

member_id, name

member_id = 15和name ='约翰';

我想更新此数据并执行以下查询:

mysql_query("UPDATE members SET member_id = 14, name = 'Peter' WHERE member_id = 15

这只是一个例子,但是mysql可能会失败并且UPDATE可能只是名称行。因此,在完成上面的mysql_query之后,它将变为member_id = 15并且name ='彼得';

这只是一个例子。今天,类似的情况发生在我的网站上,我检查了我的代码一百次,我看到没有错误,并且在它之前没有任何相同的错误。

那么,我应该重新检查我的代码一百倍,还是会发生?

非常感谢。

4 个答案:

答案 0 :(得分:2)

根据规范,单个UPDATE语句是原子的;即:要么更新所有列,要么不更新任何列。

所以不,它不应该发生。但当然可能存在MySQL的错误。

答案 1 :(得分:0)

在你的查询之后加上or die(mysql_error());,这样如果真的发生这种情况,你至少会知道它。

答案 2 :(得分:0)

我认为它不应该成为member_id = 15和name ='Peter'。就我所见,SQL语法是正确的,似乎一切都很好。如果您的数据库发生错误并且您的查询在那一刻被执行,那么上帝只会知道会发生什么。尽管如此,大多数情况下,查询是完全执行还是不执行,使mysql_query()返回false

如果你在网上商业网站中,你应该如已经建议的那样至少检查代码是否有任何错误,如下所示:

mysql_query($sql) or die('An error occurred');
如果您处于调试模式,请执行以下操作:

mysql_query($sql) or die(mysql_error());

答案 3 :(得分:0)

我不像其他人那样确定单行更新是原子的。 MySQL与标准SQL的不同之处在于它从左到右执行单表UPDATE的列分配。这意味着member_id = 14name = 'Peter'之前完成。如果name = 'Peter'违反约束,或触发另一个失败的更新,则该分配将失败。但是,整个声明是否失败可能取决于各种因素,包括该表是否使用交易安全引擎。