2013-08-01 135 views
1

我真的知道,如果你想阻止你表雙輸入數據,您可以檢查是否通過一個簡單的查詢如何避免重複記錄而不是否存在

SELECT `id` FROM TABLE WHERE `title` == 'test' 

我存在的價值檢查每個值「M也意識到PHP不能在1個查詢處理多個SQL請求,因此,例如:

SELECT `id` FROM TABLE WHERE `title` == 'test1' 
SELECT `id` FROM TABLE WHERE `title` == 'test2' 
SELECT `id` FROM TABLE WHERE `title` == 'test3' 

因此,一個解決辦法是把'test1''test2''test3'到一個數組,循環,並執行相同的連續查詢3次。

但我想完成的只是插入一行,如果具有相同數據的另一行尚不存在。應該有比這種方法更好的方法。

// if (!$row_exists) { 
INSERT INTO table_name (a, b, c) VALUES (1, 2, 3) 

回答

4

爲所有必要的列創建一個UNIQUE索引。 MySQL不會允許他們重複。

+0

@ user2642959:不要在'INSERT'之前進行任何檢查。 – wallyk

0

添加UNIQUE約束上,都應該是唯一的字段:

ALTER TABLE table_name ADD UNIQUE u_abc (a, b, c); 

然後做一個INSERT IGNORE

INSERT IGNORE INTO table_name (a, b, c) VALUES (1, 2, 3) ; 

這將插入什麼,如果一個唯一性約束將被侵犯(即如果記錄已經存在)

0

替換成過去一直很方便。希望它可以幫助

Replace Into table_name (a, b, c) VALUES (1, 2, 3); 

參考: http://dev.mysql.com/doc/refman/5.0/en/replace.html

+0

請注意,這是作爲一個'INSERT'實現的,可選地在前面加上'DELETE'(如果記錄已經存在)。注意副作用。它還需要存在'UNIQUE'索引。 – RandomSeed

0

SQL具有很強的方法來管理陣列中的數據的唯一岬(防止重複)。我建議研究UNIQUE約束和主鍵的功能,並確定它們是否有助於解決您的問題。

0

您也可以通過使單個語句進行檢查:

SELECT column_name(s) 
FROM table_name 
WHERE column_name IN (value1,value2,...); 

,然後執行插入操作。

相關問題