【问题标题】:Mysql REPLACE not workingMysql替换不起作用
【发布时间】:2013-03-09 03:46:21
【问题描述】:

由于某种原因,当我使用替换时,我的脚本没有删除现有行。

我正在开发一个库存管理系统,我可能每隔一小时左右调用一次这个脚本来更新数据库:

   REPLACE INTO inventory(username, sku,asin,set_price,inventory)
                   VALUES('trav','AEG5502','B00875JE0C','23.49','');

但不是删除旧行,而是创建一个具有完全相同信息的新行。

我确定这是一个简单的错误,但如果有人可以帮助我,我会很高兴。

附加信息,一行大约有 15 列。这些列(username、sku、asin、set_price,inventory)都不是primary key,我不知道替换是否必须如此,但我想我会提一下。

谢谢

【问题讨论】:

  • REPLACE 的工作方式与 INSERT 完全相同,只是如果表中的旧行与 PRIMARY KEY 或 UNIQUE 索引的新行具有相同的值,则在新行被删除之前旧行被删除插入。
  • 离题。但我看到你在行中插入了一个用户名。包含 user_id 而不是名称更明智。如果用户名发生变化怎么办?
  • @bart:假设外键设置正确,您可以级联这样的更改。

标签: php mysql sql replace sql-update


【解决方案1】:

RTLM:http://dev.mysql.com/doc/refman/5.0/en/replace.html replace 仅在您使用的任何字段是表中的主键或至少是唯一键时才会替换。因为你的字段都不是,它只是做一个插入

【讨论】:

  • 射击,我想我在设置数据库时没有考虑到这一点。不过感谢您的帮助!如果用户名 = trav,有什么方法可以模拟 sku 的唯一性?我猜有些用户会有相同的 sku 编号。
  • 临时猜测:在 (username,sku) 元组上添加唯一索引?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2018-05-02
  • 2018-04-27
  • 2018-03-15
  • 2015-02-21
  • 1970-01-01
相关资源
最近更新 更多