我必须将多个行更新到表中,如果表中不存在更新行,我需要插入该行。我不能使用唯一键,因此不能使用 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
答案 0 :(得分:3)
您可以使用临时表。
如果您有大量数据,这比按记录记录要快。
答案 1 :(得分:1)
这就是我们使用的商店程序,也可能适合您。
if not exists (select 1 from Table where column1 ='xxxxx' AND column2='xxxxx')
insert into Table ( column1,column2)
values ( @xxxx,xxxxx)
else
update Table
答案 2 :(得分:0)
UPDATE <TABLE>
SET COLUMN1 = 'xxxx', COLUMN2 ...
WHERE COLUMN1 = ... AND COLUMN2 ...
IF @@ROWCOUNT = 0
INSERT INTO <TABLE> (COLUMN1, ...)
VALUES ('xxxx', ...)
如果并发可能成为问题,请确保在TRANSACTION ISOLATION LEVEL REPEATABLE READ
中运行。
答案 3 :(得分:0)
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并不好。
答案 4 :(得分:0)
您可以使用EXISTS或查看子选择的计数(如果其>&gt; 0知道该行是否已存在
答案 5 :(得分:-1)
您可能会发现有用的REPLACE语句。其语法描述为here。