替换成有一个where子句吗?

2024-01-01

我正在编写一个应用程序,并使用 MySQL 作为 DBMS,我们正在下载房产报价,但存在一些性能问题。旧的架构看起来像这样: 属性已更新。如果受影响的行数不为 1,则更新不被视为成功,否则更新查询解决了我们的问题。 如果更新不成功,并且受影响的行数超过 1,则说明有重复项,我们将全部删除。如果更新不成功,我们根据需要删除重复项后,就会发生插入。该架构运行良好,但存在一些速度问题,因为如果 15 天没有更新,属性就会被删除。 理论上,主要问题是删除属性,因为有些属性存在数月之久,并且索引彼此相距甚远(我们正在谈论 500、000+ 属性)。

我们的主人告诉我使用替换而不是删除属性,并且所有已弃用的属性应被视为已死亡。我已经这样做了,但是由于语法错误,问题开始出现,并且我在任何地方都找不到用 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 http://dev.mysql.com/doc/refman/5.0/en/replace.html

感谢您提前的答复, 拉约斯·阿帕德


我可以看到你已经解决了你的问题,但要回答你原来的问题:

REPLACE INTO does 不是 have a WHERE clause.

The REPLACE INTO语法的工作方式完全就像INSERT INTO但在插入新行之前,具有相同主键或唯一键的任何旧行都会被自动删除。

这意味着代替WHERE子句中,您应该将主键添加到要替换的值中以限制您的更新。

REPLACE INTO myTable (
  myPrimaryKey,
  myColumn1,
  myColumn2
) VALUES (
  100,
  'value1',
  'value2'
);

...将提供与...相同的结果

UPDATE myTable
SET myColumn1 = 'value1', myColumn2 = 'value2'
WHERE myPrimaryKey = 100;

...或更准确地说:

DELETE FROM myTable WHERE myPrimaryKey = 100;
INSERT INTO myTable(
  myPrimaryKey,
  myColumn1,
  myColumn2
) VALUES (
  100,
  'value1',
  'value2'
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

替换成有一个where子句吗? 的相关文章

随机推荐