我目前想到两种办法:
其一:只需要在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'
)