2013-03-20 109 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