2011-03-22 63 views
0

假設我有一個表user_count定義如下:這兩種實現'重複增量'的方式有什麼區別?

id   primary key, auto increment 
    user_id  unique 
    count  default 0 

我想要做的是增量count一個當用戶的現有記錄存在,否則插入新記錄。

目前,我做這樣(在Python):

try: 
     cursor.execute("INSERT INTO user_count (user_id) VALUES (%s)", user.id) 
    except IntegrityError: 
     cursor.execute("UPDATE user_count SET count = count+1 WHERE user_id = %s", user.id) 

而且它也可以實現這種方式:

cursor.execute("INSERT INTO user_count (user_id) VALUES (user_id) ON DUPLICATE KEY UPDATE count = count + 1", user.id) 

什麼是這兩種方式之間的區別,哪一個更好?

回答

1

第二個是一個SQL命令,它利用數據庫提供的功能準確解決您在這裏遇到的問題。

它會使用它,因爲它應該更快,更可靠。

如果該功能不可用(較舊的數據庫版本?),第一個是後備。

1

第一個使用異常來指導程序流程,除非您沒有其他解決方案(例如獲取對文件的獨佔訪問權限),否則這不是您應該執行的操作。此外,它需要從應該更好地處理該案例的數據庫中獲得工作。

第二個代碼處理數據庫中的所有工作,這又可以優化查詢計劃以非常有效的方式。

我會使用第二種解決方案,因爲數據庫通常比您自己更清楚如何處理案例。

+0

+1 - 例外情況例外。所有這些讓數據庫能夠做他們擅長的事情,而不是爲應用程序代碼添加額外的條件 – 2011-03-22 01:30:39

相關問題