Cla*_*diu 3 sql database postgresql query-optimization
我知道有两种方法可以插入而无需重复.第一个是使用一个WHERE NOT EXISTS子句:
INSERT INTO table_name (col1, col2, col3)
SELECT %s, %s, %s
WHERE NOT EXISTS (
SELECT * FROM table_name AS T
WHERE T.col1 = %s
AND T.col2 = %s)
Run Code Online (Sandbox Code Playgroud)
另一个是做LEFT JOIN:
INSERT INTO table_name (col1, col2, col3)
SELECT %s, %s, %s
FROM ( SELECT %s, %s, %s ) A
LEFT JOIN table_name B
ON B.COL1 = %s
AND B.COL2 = %s
WHERE B.id IS NULL
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
是否存在一个比另一个更快的一般规则,还是依赖于表?有不同的方式比两者都好吗?
我建议在您需要唯一的列上定义UNIQUE约束(在这种情况下为col1和col2),然后执行INSERT.根据需要处理异常.
关于要求回滚的异常的评论,PostgreSQL的解决方案是在尝试可能导致异常的插入之前设置事务保存点.如果出现异常,则回滚到保存点.
看到:
| 归档时间: |
|
| 查看次数: |
3092 次 |
| 最近记录: |