[英]Execute update if row exists else do insert
我必須將多個行更新到表中,如果表中不存在更新行,則需要插入該行。 我不能使用唯一鍵,因此不能使用ON復制KEY UPDATE
我必須實現這樣的目標
DECLARE count DOUBLE;
SELECT count(uid)
INTO count
FROM Table
WHERE column1 ='xxxxx'
AND column2='xxxxx';
IF (count=0)
THEN
--peform insert
ELSE
--perform update
END IF
這是一個高性能的應用程序。任何想法? 代碼級別或查詢級別
僅供參考:數據庫是Mysql
您可以使用臨時表。
如果您有大量數據,這將比按記錄記錄更快。
這就是我們使用的商店程序,也可能適合您。
if not exists (select 1 from Table where column1 ='xxxxx' AND column2='xxxxx')
insert into Table ( column1,column2)
values ( @xxxx,xxxxx)
else
update Table
UPDATE <TABLE>
SET COLUMN1 = 'xxxx', COLUMN2 ...
WHERE COLUMN1 = ... AND COLUMN2 ...
IF @@ROWCOUNT = 0
INSERT INTO <TABLE> (COLUMN1, ...)
VALUES ('xxxx', ...)
如果並發可能是一個問題,請確保在TRANSACTION ISOLATION LEVEL REPEATABLE READ
運行。
BEGIN TRAN
IF EXISTS ( SELECT *
FROM Table WITH ( UPDLOCK, SERIALIZABLE )
WHERE CONDITION)
BEGIN
UPDATE Table SET SOMETHING WHERE CONDITION
END
ELSE
BEGIN
INSERT INTO Table(Field1,....) VALUES (Value1,..... )
END
COMMIT TRAN
注意:事務非常好,但在使用多個查詢進行插入/更新時使用IF EXISTS並不好。
你可以使用EXISTS或檢查sub select的cound,如果它> 0,知道該行是否已經存在
您可能會發現有用的REPLACE語句。 它的語法在這里描述。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.