MySQL与PostgreSQL中解决插入主键冲突的方法

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的使用

 

posted on 2021-10-17 10:30  江湖乄夜雨  阅读(1277)  评论(0编辑  收藏  举报