2012-10-16 109 views
3

我正在嘗試使用產品說明表,並且我有一個頭部劃痕器...
我有一種方法(php)查找記錄的ID密鑰。
如果符合搜索標準不存在,它會嘗試創建該行並返回該ID。MySQL:SELECT返回沒有結果,但是INSERT引發'Duplicate Entry'錯誤

眼下,SELECT將返回零行,但具有相同值的INSERT拋出一個欺騙的錯誤。

SELECT `id` 
FROM (`m3sandbox_product_description`) 
WHERE `product_id` = '403466' 
AND `company_id` = '5' 
AND `value` = 'TERMINAL, FEMALE DISCONNECT, 6.3MM, RED; Connector Type:Female Disconnect; Insulator Color:Red; Termination Method:Crimp; Stud/Tab Size:6.35mm x 0.81mm; Wire Size (AWG):22AWG to 16AWG; Contact Material:Copper; Contact Plating:Tin ;RoHS Compliant: Yes' 
LIMIT 1 

INSERT INTO `m3sandbox_product_description` (`product_id`, `company_id`, `value`, `datetime_created`) 
VALUES ('403466', '5', 'TERMINAL, FEMALE DISCONNECT, 6.3MM, RED; Connector Type:Female Disconnect; Insulator Color:Red; Termination Method:Crimp; Stud/Tab Size:6.35mm x 0.81mm; Wire Size (AWG):22AWG to 16AWG; Contact Material:Copper; Contact Plating:Tin ;RoHS Compliant: Yes', '2012-10-16T15:39:44+00:00') 

事實證明,在我們共同的其他開發人員使用了完全不同的代碼庫(但類似的方法)對這種相同的DB,和他面對完全一樣的特殊障礙。

有一些特殊的東西,我們應該做的用描述值來查詢,以確保我們的SELECT的行爲像預期的那樣

+0

的PK,這是自動遞增,是'id'(在這些查詢未使用)......這個表有超過'值的唯一索引','product_id'和'company_id'字段。 – mOrloff

+0

好吧,難道你的auto_increment序列被重置?這發生在我身上幾次。你使用什麼DBMS?你有多少條記錄?您是否使用固定ID插入了任何記錄? –

+0

@吉榮,vuurens是,也許:) ..使用實時表中的其他dev'r是,我不確定他周圍所有的經歷的細節......在我的情況,雖然,我使用「沙箱」活動表的副本和我做了** _嘗試插入行之前,我記得把ID設置爲auto_increment ...之後,auto_increment _ **是** _重置(下一個auto_increment值_currently_看起來右)......我很高興這對某人來說有點熟悉。請分享更多關於您的類似過去​​的經驗/解決方案...順便說一句,該表目前有近54萬行。 – mOrloff

回答

1

重複的條目由重複的主密鑰只的,不管所使用的其他值觸發。如果product_id是主鍵(?),那麼對於product_id = 403466和其他不同的值,可能存在一條記錄?

+0

謝謝..看到我的新評論的OP – mOrloff

1

我發現它!!!!

TERMINAL字符串長度

搜索/插入語句超過列大小的長文本值,因此,尋找那個長的字符串當沒有精確匹配,但插入時,該字符串末尾被截斷,新的截斷的字符串確實具有完全匹配。

我希望這可以幫助一個人在未來:)

+0

我會嘗試回來後,強加2天的等待期,並將其標記爲答案:) – mOrloff