PostgreSQL在插入資料時校驗重複

2021-10-13 16:14:41 字數 2129 閱讀 4899

insert into

"user"(

display_name,

telephone,

address,

username,

"password")

select

'王凱歌',

null,

null,

'wangkaige',

'$2a$10$i2wwn3afp8t'

where

not exists(

select

idfrom

"user"

where

username ='wangkaige'

and delete_flag = false );

該句分兩個段落進行解析:

第乙個段落為:

select

'王凱歌',

null,

null,

'wangkaige',

'$2a$10$i2wwn3afp8t'

where

not exists(

select

idfrom

"user"

where

username ='wangkaige'

and delete_flag = false )

where子句後跟的是一段判斷表示式,如當我們執行

select * from "user" where true

-- 或 select * from "user" where 1=1

時,將恆成立地查詢所有的資料。

not exists(

select

idfrom

"user"

where

username ='wangkaige'

and delete_flag = false )

這段**判斷的是是否存在乙個username='wangkaige'並且未被刪除的記錄。當不存在時,將返回空白記錄,因此not exists判斷成功。這個時候sql片段

select

'王凱歌',

null,

null,

'wangkaige',

'$2a$10$i2wwn3afp8t'

where

not exists(

select

idfrom

"user"

where

username ='wangkaige'

and delete_flag = false )

將返回一行記錄

?column?

?column?

?column?

?column?

?column?

王凱歌null

null

wangkaige

$2a$10$i2wwn3afp8t

這行記錄的值將作為insert語句values新增到庫中去。這裡的表頭不用關心,沒關係的。

當原來查詢的記錄存在時,自行腦補一下。

第二個段落

第二個段落就是insert語句段落了,再粘一遍

insert into

"user"(

display_name,

telephone,

address,

username,

"password")

select

'王凱歌',

null,

null,

'wangkaige',

'$2a$10$i2wwn3afp8t'

where

not exists(

select

idfrom

"user"

where

username ='wangkaige'

and delete_flag = false );

postgresql 迴圈插入資料

plsql直接迴圈插資料當然比 裡迴圈插要快很多,只是pl sql的語法不怎麼統一,不同的資料庫語法上有些細微的差異,很頭疼 postgresql 迴圈插入資料 do declare v idx integer 1 begin while v idx 10 loop v idx v idx 1 in...

postgresql 實現插入 更新操作

insert into sip data sip ip 2m data time first,time last,ip,ip port,port values 2019 4 6 15 14 29 2019 4 6 14 59 28 203.190.77.198 203.190.77.198 4256...

在ubuntu下安裝PostgreSQL 9 0

最新版的直接可以用命令安裝 sudo apt get install postgresql xx 如果想安裝舊版本的 需要更新一下源 cd etc apt cp sources.list sources.list.old sudo vi sources.list在sources.list追加 deb...