insert+where特殊场景的解决方案

在数据库插入的场景中,我们可能会遇见这种情况:检测数据库是否含有即将要写入的数据。比如 province(省份)包含一个唯一字段:name,以往的做法是:

1:先执行一句查询的sql语句

1
select * from province where name='?'

2:如果这条数据不存在,再执行插入语句

1
insert into province(name) values('?')

虽然说上面的方法能够完成这样的场景,但是不够优雅!所以我在想,有没有一个好的办法能够解决这样的问题呢?于是,我联想到几条sql语句

把当前时间转化成特定格式的字符串

1
select to_char(to_timestamp(extract(epoch from now() )::integer), 'YYYY-MM-DD')

把代处理表中的数据插入到新表中

1
insert province (name) select name from pendding_province_list

于是,我开始着手改造insert插入语句

1
2
insert into province (name) select '?'
where not exists (select * from province where name='?')

完美!