我正在编写一个应用程序,而且我正在使用MySQL作为DBMS,我们正在下载物业优惠,并且出现了一些性能问题。旧的建筑看起来像这样: 属性已更新。如果受影响的行数不是1,那么更新不会被视为成功,否则更新查询将解决我们的问题。 如果更新不成功,并且受影响的行数大于1,则我们有重复项,我们将其全部删除。如果更新不成功,如果需要删除重复项,则会发生插入操作。此架构运行良好,但存在一些速度问题,因为如果15天内未更新,属性将被删除。 理论上主要的问题是删除属性,因为一些属性在几个月内仍然存在,并且索引距离很远(我们正在谈论500,000多个属性)。是否替换成有where子句?
我们的主人告诉我使用replace into而不是删除属性,所有不赞成使用的属性应该被视为DEAD。我已经这样做了,但是由于语法错误而开始出现问题,我找不到任何用where子句替换的例子(我想用新属性替换DEAD属性而不是删除旧的财产和插入一个新的确保优化)。我的查询是这样的:
replace into table_name(column1, ..., columnn) values(value1, ..., valuen) where ID = idValue
当然,我计算idValue和处理一切,但我有一个语法错误。我想知道,如果我错了,并有一个替代成where子句。
我发现了一种替代解决方案,它比替换成(仅使用更新查询)更好,因为如果使用替换,删除会发生在窗帘后面,但是我想知道是否我错了当我说替换成没有where子句的时候。欲了解更多参考,请参阅以下链接:
http://dev.mysql.com/doc/refman/5.0/en/replace.html
谢谢你的答案提前, 阿帕德·拉约什
非常感谢您的回答。事实上,这是一个矫枉过正,你是绝对正确的,我只是想知道,如果插入有一个where子句来过滤要替换的东西,因为我们的主机说它有,我想澄清一下(如果我已经找到出于此我没有看到有理由不告诉他) REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] SELECT ... 如果我理解正确,那么上面的语法就是,在哪里说出哪里可能出现。你说的对,但是,where子句在select – 2010-06-09 16:20:21
而且替换成没有在那里的例子,所以,我认为替换成没有的地方。 – 2010-06-09 16:58:56