2011-03-29 167 views
0

我正在寫一個簡單的程序來將行插入到表中,但是當我開始編寫程序時,我有一個疑問。在我的程序中,我會重複輸入一次。那時我必須通知用戶這已經存在。插入VS(選擇並插入)

以下哪些途徑的好用來實現這個

  1. 直接執行Insert語句將獲得主鍵衝突錯誤,如果它是重複的通知,否則將被插入。一個要執行的查詢

  2. 首先搜索主鍵值。如果找到價值提示用戶。否則,請執行插入操作。對於非重複行,此方法需要2個查詢。

請讓我知道這些方法之間的權衡。哪一個最好遵循?

問候, 陽光明媚。

+1

您使用的是哪種語言和數據庫?它是PHP和MySQL嗎?每個數據庫都有不同的功能,在選項2中,您需要鎖定,因爲在搜索之後和之前插入一些其他用戶可以插入,您將得到重複和錯誤... – NickSoft 2011-03-29 11:23:29

+0

我使用DB2數據庫和Java作爲編程語言 – 2011-03-29 11:29:48

+0

嗨Nicksoft 我正在尋找這個行鎖定概念。你能提供一些關於這方面的意見。 – 2011-03-29 11:41:23

回答

0

我會選擇第二種方法。

第一個會導致異常被拋出這是衆所周知的是非常昂貴的...

第二屆辦法將使用SELECT count(*) FROM mytable WHERE key = userinput這將是非常快,INSERT語句,你可以使用相同的數據庫連接對象(假設爲OO))。

使用預準備語句將預先優化查詢,我認爲這將使第二種方法比第一種方法更好,更靈活。

編輯:根據你的DBMS你也可以使用一個if not exists條款

EDIT2:我認爲Java會拋出一個SQLExcpetion不管是什麼地方出了錯,即使用第一方法,您將無法之間不同重複的條目或不可用的數據庫,而不必解析錯誤消息 - 這又是使用SELECT + INSERT(或if not exists

+0

感謝您的迴應 – 2011-03-29 11:28:33