PGSQL中,如何忽略insert语句执行中的check校验

我目前想到两种办法:
其一:只需要在insert语句后加入“ON conflict(约束字段名称) DO NOTHING“就可以了,conflict关键字中可以有多个约束字段。(限制强,只postgresql支持

注意:做判断的字段必须有索引约束。例如Unique唯一索引做约束,要不然会执行错误。
该写法只针对于postgresql数据库,如果有其他数据库的写法也可以补充在下面。

例子:

INSERT INTO "表名" ("id", "count", "url") VALUES ('id', 0, 'xxx')  ON conflict(id) DO NOTHING;

id作为表中的主键,所以conflict中就用id来作为约束字段

conflict 的更多使用方法可查看pgsql官方文档:https://www.postgresql.org/docs/current/sql-insert.html

其二:使用先查询判断,再insert的方式(这种方式稍微复杂一点,但是限制不强,多种主流数据库都支持

例子:

INSERT INTO "表名" ("id", "count", "url") 
select '4a37de73-81be-4e01-8458-d274893005d1', 0, '9274660c-ca86-4004-8e5d-b819bf9ed794'
where NOT EXISTS(
    SELECT 1 from 表名 where id = '4a37de73-81be-4e01-8458-d274893005d1'
)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值