2010-04-02 49 views
3

這裏重複是Python的MySQL的支票之前插入

CREATE TABLE IF NOT EXISTS kompas_url 
(
    id BIGINT(20) NOT NULL AUTO_INCREMENT, 
    url VARCHAR(1000), 
    created_date datetime, 
    modified_date datetime, 
    PRIMARY KEY(id) 
) 

我想只有當網址尚未存在

任何想法來執行插入到kompas_url表的表?

感謝

回答

9

您可以找出是否是在那裏第一次,由SELECT ING通過url,或可以使url領域獨樹一幟:

CREATE TABLE IF NOT EXISTS kompas_url 
    ... 
    url VARCHAR(1000) UNIQUE, 
    ... 
) 

這將從插入重複停止MySQL的行,但它會在您嘗試插入時報告錯誤。這不太好 - 雖然我們可以處理這個錯誤,但它可能會掩蓋其他人。爲了解決這個問題,我們使用ON DUPLICATE KEY UPDATE語法:

INSERT INTO kompas_url (url, created_date, modified_date) 
VALUES ('http://example.com', NOW(), NOW()) 
ON DUPLICATE KEY UPDATE modified_date = NOW() 

這使我們能夠提供一個重複的值的一個獨特的領域的情況下,UPDATE聲明(這可以包括你的主鍵)。在這種情況下,我們可能想要更新modified_date字段與當前日期。

編輯:正如~unutbu建議,如果你不想在重複改變什麼,你可以使用INSERT IGNORE語法。這只是工作原理如下:

INSERT IGNORE INTO kompas_url (url, created_date, modified_date) 
VALUES ('http://example.com', NOW(), NOW()) 

這只是簡單地將某些種類的錯誤到警告,最有用,那說明發生的錯誤會出現重複的唯一項目。如果您將關鍵字IGNORE放入您的語句中,您將不會收到錯誤 - 查詢將被簡單地刪除。在複雜的查詢中,這可能也會隱藏其他可能有用的錯誤,所以如果你想使用它,最好是確保你的代碼是正確的。

+0

有沒有其他方式,然後在重複更新?如檢查是否已有url = http://example.com? – 2010-04-02 01:30:32

+0

例如query2 =「」「SELECT * FROM kompas_url WHERE url ==%s」「」 – 2010-04-02 01:34:13

+2

還有'INSERT IGNORE',如果插入會導致唯一鍵的重複,它將簡單地忽略插入語句。 – unutbu 2010-04-02 02:02:59