2013-05-08 91 views
0

我使用INSERT ON DUPLICATE KEY UPDATE我的應用程序,它通常必須在一個事務中許多行向數據庫提交考慮。不過,我對一件事有些困惑。在線使用示例在其功能變體中似乎很多。INSERT的正確使用....對重複密鑰更新

我找的行爲是,我要插入的行,如果它不已經是唯一索引的存在,但如果它存在,我只是想回到的ID,但沒有更新。我是否正確地認爲這是本聲明的預期功能。

此外,我不想去我的表來創建虛擬字段利用該功能,因爲在許多實例建議。在我看來,這只是不好的做法。

任何意見是極大的讚賞。下面是MySQL的網站,說明接近我想要什麼,但C = 3部分不就行了解釋的例子。我想知道是否需要這樣做才能使last_insert_id實際工作,或者只是它們的示例的一部分。在last_insert_id部分之後我沒有看到一些虛擬操作,那麼last_insert_id將不起作用。

INSERT INTO table (a,b,c) VALUES (1,2,3) 
    ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3; 

回答

0

取而代之,您可以僅用SELECT的唯一ID來確定它是否存在。如果是這樣,只需返回它。否則,請執行INSERT並返回新ID。

0

你不能用MySQL中的單個語句做到這一點。 A SELECT語句返回現有值;數據修改語句(包括INSERT)不返回數據。 (他們通常會返回某種計數。)這包括INSERT...ON DUPLICATE KEY UPDATE語句—它不返回數據。

你可以用存儲過程做你想做的事情,但是過程將包含多個語句。如果這不適用於您,請按照@Explosion Pills建議並使用SELECT,如果需要,請使用INSERT