我正在寫一個簡單的程序來將行插入到表中,但是當我開始編寫程序時,我有一個疑問。在我的程序中,我會重複輸入一次。那時我必須通知用戶這已經存在。插入VS(選擇並插入)
以下哪些途徑的好用來實現這個
直接執行Insert語句將獲得主鍵衝突錯誤,如果它是重複的通知,否則將被插入。一個要執行的查詢
首先搜索主鍵值。如果找到價值提示用戶。否則,請執行插入操作。對於非重複行,此方法需要2個查詢。
請讓我知道這些方法之間的權衡。哪一個最好遵循?
問候, 陽光明媚。
我正在寫一個簡單的程序來將行插入到表中,但是當我開始編寫程序時,我有一個疑問。在我的程序中,我會重複輸入一次。那時我必須通知用戶這已經存在。插入VS(選擇並插入)
以下哪些途徑的好用來實現這個
直接執行Insert語句將獲得主鍵衝突錯誤,如果它是重複的通知,否則將被插入。一個要執行的查詢
首先搜索主鍵值。如果找到價值提示用戶。否則,請執行插入操作。對於非重複行,此方法需要2個查詢。
請讓我知道這些方法之間的權衡。哪一個最好遵循?
問候, 陽光明媚。
我會選擇第二種方法。
第一個會導致異常被拋出這是衆所周知的是非常昂貴的...
第二屆辦法將使用SELECT count(*) FROM mytable WHERE key = userinput
這將是非常快,INSERT
語句,你可以使用相同的數據庫連接對象(假設爲OO))。
使用預準備語句將預先優化查詢,我認爲這將使第二種方法比第一種方法更好,更靈活。
編輯:根據你的DBMS你也可以使用一個if not exists
條款
EDIT2:我認爲Java會拋出一個SQLExcpetion
不管是什麼地方出了錯,即使用第一方法,您將無法之間不同重複的條目或不可用的數據庫,而不必解析錯誤消息 - 這又是使用SELECT + INSERT(或if not exists
)
感謝您的迴應 – 2011-03-29 11:28:33
您使用的是哪種語言和數據庫?它是PHP和MySQL嗎?每個數據庫都有不同的功能,在選項2中,您需要鎖定,因爲在搜索之後和之前插入一些其他用戶可以插入,您將得到重複和錯誤... – NickSoft 2011-03-29 11:23:29
我使用DB2數據庫和Java作爲編程語言 – 2011-03-29 11:29:48
嗨Nicksoft 我正在尋找這個行鎖定概念。你能提供一些關於這方面的意見。 – 2011-03-29 11:41:23