我会用一个
UPDATE
ROW_COUNT()
如果没有行被更新,那么
INSERT
.
drop table if exists t;
create table t (id int, x int, y int, str varchar(255));
insert into t (id, x, y, str) values (1, 2, 3, 'foo');
select * from t;
update t set str = 'bar'
where x = 2 and y = 3;
insert into t (id, x, y, str)
select 1, 2, 3, 'inserted'
from dual
where row_count() = 0;
select * from t;
update t set str = 'baz'
where x = 20 and y = 30;
insert into t (id, x, y, str)
select 10, 20, 30, 'baz'
from dual
where row_count() = 0;
select * from t;
drop table t;
你可以在这里看到它的作用:
https://rextester.com/FRFTE79537
我的想法是你做
首先,然后是
INSERT ... SELECT
在哪里
SELECT
只返回一行
如果
ROW_COUNT() = 0
更新
没有匹配任何行。