2013-03-20 136 views
0

由于某种原因,当我使用replace时,我的脚本没有删除现有的行。Mysql REPLACE无法正常工作

我工作的库存管理系统,我可以调用这个脚本每隔一小时左右更新DB:

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

但不是删除旧行,它会创建一个新的行与完全相同的信息。

我敢肯定这是一个简单的错误,但我会爱如果有人能帮助我。

附加信息,一行约有15列。这些列中没有一个(username,sku,asin,set_price,inventory)是primary key,我不知道这是否是替代工作的情况,但我想我会提到它。

感谢

+0

REPLACE的工作方式与INSERT完全相同,只是如果表中的旧行具有与PRIMARY KEY或UNIQUE索引的新行相同的值,则旧行在插入新行之前被删除。 – hank 2013-03-20 06:44:00

+1

Offtopic。但我看到你在该行插入用户名。包含user_id而不是名称会更明智。如果用户名更改会怎么样? – Bart 2013-03-20 06:46:46

+0

@bart:假设正确的外键设置,您可以级联这样的更改。 – 2013-03-20 13:54:25

回答

3

RTLM:http://dev.mysql.com/doc/refman/5.0/en/replace.htmlreplace如果有任何您使用的字段是主要的或至少在表中的唯一密钥只负责更换。因为没有任何字段,它只是插入一个

+0

拍摄,我想我在设置数据库时并没有考虑到这一点。感谢您的帮助!如果用户名= trav,有没有什么办法可以模拟sku?我猜测一些用户将拥有相同的sku编号。 – user1556695 2013-03-20 07:06:46

+0

offhand guess:在(username,sku)元组上打一个唯一索引? – 2013-03-20 13:54:51