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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM