MySQL + PostgreSQL批量插入更新insertOrUpdate,熬夜整理出Java后端学习路线

VALUES

(

${map.tableInfo.tableId},

#{map.tableInfo.fileName},

now(),

<foreach collection=“list” index=“key” item=“value”

separator=“,”>

#{value}

TO_TIMESTAMP(#{value},‘yyyy-MM-dd hh24:mi:ss’)

${value}

)

on conflict (

file_name, table_id

, “id_number”

) do update

set

“table_id” = excluded.“table_id”,

“file_name” = excluded.“file_name”,

“create_time” = excluded.“create_time”,

k e y " = e x c l u d e d . " {key}" = excluded." key"=excluded."{key}”

五、MySQL中insertOrUpdate代码实例


1、建表语句

CREATE TABLE t_user (

username varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

password varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,

age int(0) NULL DEFAULT NULL,

address varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

create_time datetime(0) NULL DEFAULT NULL,

update_time datetime(0) NULL DEFAULT NULL,

version int(0) NOT NULL,

UNIQUE INDEX user_union_index(username, password, age) USING BTREE

) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

2、普通方式

INSERT INTO t_user

(username,password,age,create_time)

VALUES(‘张三’ ,‘123456’,18,NOW())

ON DUPLICATE KEY UPDATE

username=‘张三’,

password=‘123456’,

create_time=now()

3、ON DUPLICATE KEY UPDATE

insert into on duplicate key update表示插入更新数据,当记录中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据更新(update),如果没有数据效果则和insert into一样。

INSERT INTO t_user

(username,password,age,create_time,update_time,version)

VALUES( ‘zs’ ,‘123’,10,now(),now(),1)

,( ‘ls’ ,‘123456’,20,now(),now(),1)

,( ‘ww’ ,‘123’,30,now(),now(),1)

ON DUPLICATE KEY UPDATE

username= VALUES(username)

,password=VALUES(password)

,age=VALUES(age)

,update_time=VALUES(update_time)

,version = version + 1

4、REPLACE INTO

replace into表示插入替换数据,当记录中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据替换(先delete再insert),如果没有数据效果则和insert into一样。

REPLACE INTO t_user

(username,password,age,create_time,update_time,version)

VALUES

( ‘zs’ ,‘123’,10,now(),now(),1)

5、INSERT IGNORE INTO

insert ignore into表示尽可能的忽略冲突,暴力插入。

INSERT IGNORE INTO t_user

(username,password,age,create_time,update_time,version)

VALUES

( ‘zs’ ,‘123’,10,now(),now(),1) ,

( ‘哪吒’ ,‘123’,30,now(),now(),2)

6、小结

insert into values 或 insert into select批量插入时,都满足事务的原子性与一致性,但要注意insert into select的加锁问题。

replace into与insert into on duplicate key update都可以实现批量的插入更新,具体是更新还是插入取决与记录中的pk或uk数据在表中是否存在。如果存在,前者是先delete后insert,后者是update。

insert ignore into会忽略很多数据上的冲突与约束,平时很少使用。

往期精彩内容:

Java知识体系总结

Spring框架总结

超详细的springBoot学习笔记

常见数据结构与算法整理总结

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

[外链图片转存中…(img-ycMn3tvb-1710886801819)]
[外链图片转存中…(img-1ctkGryO-1710886801819)]
[外链图片转存中…(img-Q88f8Oma-1710886801820)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-1WxnuHM7-1710886801820)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值