好的,我们假设有两行:
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
='彼得';
这只是一个例子。今天,类似的情况发生在我的网站上,我检查了我的代码一百次,我看到没有错误,并且在它之前没有任何相同的错误。
那么,我应该重新检查我的代码一百倍,还是会发生?
非常感谢。
答案 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 = 14
在name = 'Peter'
之前完成。如果name = 'Peter'
违反约束,或触发另一个失败的更新,则该分配将失败。但是,整个声明是否失败可能取决于各种因素,包括该表是否使用交易安全引擎。