2014-03-31 50 views

回答

0
INSERT INTO popular (title, popularity) VALUES (:the_title, 1) 
ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id), popularity = popularity + 1 

確保您有title

id = LAST_INSERT_ID(id)的唯一約束,可以讓你得到更新使用LAST_INSERT_ID插入的記錄/的id(或你的MySQL API的等效功能)。如果您不需要id,則可以將其從UPDATE列表中刪除。

0

示例代碼:

if exists (select * from contact where name = @name) then 
    select -1; 
else 
    insert into contact(name) values(@name); 
    select last_insert_id(); 
end if; 

參考:

http://ask.sqlservercentral.com/questions/88038/best-mysql-practice-to-insert-a-record-if-it-does.html

http://bugs.mysql.com/bug.php?id=19243

http://mikefenwick.com/blog/insert-into-database-or-return-id-of-duplicate-row-in-mysql/

+0

這如果兩個線程調用它同時具有相同名稱將拋出一個重複鍵錯誤。您需要鎖定select中的行並確保整個事件在單個事務中運行。 – Vatev

相關問題