假设我有一个这样的表:
Number Product Type
1 Meat Cow
1 Milk A
如果我插入新行:
INSERT INTO t1 (Product, Type) VALUES (Meat, Cow)
我不要新的一行。我想将产品=肉类和类型=母牛的“数量”列增加1:
Number Product Type
2 Meat Cow
1 Milk A
是否有执行此操作的SQL命令?
答案 0 :(得分:1)
您可以使用ON CONFLICT
版本开始的9.5
尝试以下操作:
create table t1( Number int,
Product varchar(15),
Type varchar(15),
primary key (Product, Type)
);
insert into t1(Number,Product,Type) values(1,'Meat','Cow');
insert into t1(Number,Product,Type) values(1,'Meat','Cow')
on conflict (Product,Type) do update set Number = t1.Number + 1;
select * from t1;
number product type
------ ------- ----
2 Meat Cow
对于Product
和Type
列,必须有复合唯一(主)键(如果不存在)不是 42P10:没有符合ON CONFLICT规范的唯一或排除约束错误出现。
答案 1 :(得分:1)
您可以使用触发器来实现所需的功能。格式:
CREATE OR REPLACE TRIGGER trigger_name
INSTEAD OF INSERT ON table_name
WHEN (your_condition_here) --for example, row exist
BEGIN
UPDATE ... --your update query
END;
答案 2 :(得分:0)
在产品和类型上创建唯一索引,然后
INSERT INTO t1 (Product, Type) VALUES (Meat, Cow)
ON CONFLICT ON CONSTRAINT <your_key>
UPDATE set Number = Number + 1
应该工作。