Postgresql
如何在使用 PostgreSQL 插入之前檢查記錄是否存在?
我有一個記錄:
insert into posts(id, title, body) values(1, 'First post', 'Awesome');
如果
First post
標題和Awesome
正文已經存在於數據庫中,我想忽略它。創建表時,可以使用
IF NOT EXISTS
語法。對於插入,有沒有簡單的方法?
如果您在標題和正文列上創建唯一鍵約束,您可以使用如下插入語句忽略記錄是否已存在
insert into posts(id, title, body) values (1, 'First post', 'Awesome') on conflict (title, body) do nothing;
基本上就像你說的那樣:
insert into posts (id, title, body) select 1, 'First post', 'Awesome' where not exists ( select null from posts where (title, body) = ('First post', 'Awesome') )
您還可以定義一個唯一約束
(title, body)
並簡單地忽略程序中的相應異常。無論哪種情況,如果您的應用程序有多個執行緒試圖做同樣的事情,您需要確保它可以正確處理錯誤。