2
我有一个带有一个主键的MySQL表。mysql_affected_rows()在'真实'上返回1 REPLACE INTO
每晚我运行一项作业插入和更新记录。我为每个操作使用REPLACE INTO
,所以它会添加或替换现有的行。
在REPLACE INTO
查询之后,我打电话给mysql_affected_rows()
,它对于实际被替换的许多行返回的计数为1,而不是'new'(对于绝大多数被替换的行返回2)。
我知道这些“插入”中的一些是错误的,因为我跟踪批量更新开始和结束时的行数;该表没有重复的数据,加上我已验证批量更新之前存在的假'新'行。
这张表没有什么特别的地方;类似的表的工作原理与使用相同的代码一样。任何人有任何想法为什么mysql_affected_rows()
返回1为一个真正的替代而不是插入的操作?
我知道,如果行已经存在,那么REPLACE会执行删除/插入操作,这就是我难倒了 - 为什么mysql_affected_rows()返回1时,显然应该返回2?正如我所提到的,这段代码在一个相同的表上工作,所以我迷失了,试图找出为什么mysql_affected_rows()返回1. 我可以使用ON DUPLICATE,但会需要所有的列和值标签两次 - 一次用于INSERT INTO&for ON DUPLICATE。有600多列,这是很多。我可以计算列之间的变化,但这需要做一个SELECT,从而在第一个地方击败了使用REPLACE的点。 – 2011-04-13 16:51:54