PostgreSQL的案例
注意:on conflict do 語法,是在postgresql9.5版本推出的!,之前的版本不兼容!PostgreSQL upsert功能(insert on conflict do)的用法
安裝及配置pgcli工具
# brew安裝 brew install pgcli # 配置文件位置 ~/.config/pgcli/config # 配置別名的地方 vim ~/.config/pgcli/config [alias_dsn] # example_dsn = postgresql://[user[:password]@][netloc][:port][/dbname] # 本地的連接 local_docker_5433 = postgresql://postgres:password@127.0.0.1:5433/appserver_runfast_clone
操作過程
# 進入數據庫 創建數據庫 使用數據庫 pgcli -D local_docker_5433 create database whw_test_db; use whw_test_db; # 創建表 create table users (user_id varchar(255) not null constraint users_pkey primary key, user_name varchar(22) not null ) # 確認下表結構 \d+ users; # 插入幾條數據 insert into users(user_id, user_name) values('123','whw111'),('222','www222'); # 確認數據 select * from users;

再往里面插入數據的話會報主鍵沖突:

on conflict do nothing
insert into users(user_id, user_name) values('123','naruto'),('222','sasuke') on conflict(user_id) do nothing;

on conflict do update set
insert into users(user_id, user_name) values('123','naruto'),('222','sasuke') on conflict(user_id) do update set user_name=excluded.user_name;

MySQL的案例
安裝配置mycli
// brew 安裝 brew install mycli // 用戶名:root;密碼:123;本地端口是:3307 mycli -uroot -p123 -h127.0.0.1 -P 3307
初始化過程
# 創建數據庫 create database whw_mysql_db; use whw_mysql_db; # 建表 create table users( user_id varchar(255) not null, user_name varchar(22) not null, primary key (user_id) ); # 插入幾行數據 insert into users(user_id,user_name) values("111","whw1"),("222","whw2");

~~~
再往里面插入相同user_id的數據會報錯:

insert ignore
insert ignore into users(user_id,user_name) values("111","naruto"),("222","sasuke");

ON DUPLICATE KEY UPDATE
insert ignore into users(user_id,user_name) values("111","naruto"),("222","sasuke") on duplicate key update user_name=values(user_name);
~~~

自己的其他文檔
並發處理IO任務與MySQL中ON DUPLICATE KEY UPDATE的使用
