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会忽略很多数据上的冲突与约束,平时很少使用。
往期精彩内容:
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-ycMn3tvb-1710886801819)]
[外链图片转存中…(img-1ctkGryO-1710886801819)]
[外链图片转存中…(img-Q88f8Oma-1710886801820)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-1WxnuHM7-1710886801820)]