Mysql replace/insert into 插入修改数据
Mysql replace/insert into 插入修改数据
目录
方式1: replace into
语法:
Mybatis:
单个插入:
多个插入:
方式2:insert into ON DUPLICATE KEY UPDATE
语法:
Mybatis:
单个插入:
多个插入:
区别:
总结:
在使用mysqle数据库,需要增加和删除。有没有一个语句搞定的方式呢?
方式1: replace into
这个语法比较简单,把场景的 insert into 改成replace into 即可
语法:
repalce into tableX (column1, column2)values (value1, value2)
例子:
repalce into REPORT_CLASS (CLASS_ID, CLASS_NAME)values ('', '类型1') ;repalce into REPORT_CLASS (CLASS_ID, CLASS_NAME)values ('2', '类型2')
Mybatis:
单个插入:
Mapper:
void mergeReportShowCfg(@Param("param") ReportShowCfg reportShowCfg);
显象声明参数,养成好习惯
Xml:
<insert id="mergeReportShowCfg" parameterType="report.entity.ReportShowCfg" databaseId="mysql">repalce into report_show_cfg (CFG_ID, CLASS_ID, IS_PAGE,PAGE_SIZE)values (#{param.cfgId}, #{param.classId}, #{param.isPage},#{param.pageSize})
</insert>
databaseId="oracle" 指定使用什么数据库。 在多数据库中会用到,比如可能用mysql数据,oracle数据库,pg数据库等
多个插入:
Mapper:
void mergeReportParamBach(@Param("reportParamList") List<ReportParam> reportParamList);
Xml:
<insert id="mergeReportParamBach" databaseId="mysql">repalce into report_param (PARAM_ID, PARAM_NAME,SORT_ID, CLASS_ID)values<foreach collection="sysReportParamList" item="item" index="" separator=",">(#{item.paramId}, #{item.paramName},#{item.sortId}, #{item.classId})</foreach>
</insert>
方式2:insert into ON DUPLICATE KEY UPDATE
语法:
insert into tableX (column1, column2)values (value1, value2)ON DUPLICATE KEY UPDATEcolumn1=VALUES(column1),column2=VALUES(column2))
例子:
INSERT INTO REPORT_CLASS (CLASS_ID, CLASS_NAME)VALUES ('3', '类型3')ON DUPLICATE KEY UPDATECLASS_ID = VALUES(CLASS_ID),CLASS_NAME = VALUES(CLASS_NAME)
Mybatis:
单个插入:
Mapper:
void mergeReportShowCfg(@Param("param") ReportShowCfg reportShowCfg);
Xml:
<insert id="mergeReportShowCfg" parameterType="report.entity.ReportShowCfg" databaseId="mysql">insert into report_show_cfg (CFG_ID, CLASS_ID, IS_PAGE,PAGE_SIZE)values (#{param.cfgId}, #{param.classId}, #{param.isPage},#{param.pageSize})ON DUPLICATE KEY UPDATECFG_ID=VALUES(CFG_ID),CLASS_ID=VALUES(CLASS_ID),IS_PAGE=VALUES(IS_PAGE),PAGE_SIZE=VALUES(PAGE_SIZE)
</insert>
databaseId="oracle" 指定使用什么数据库。 在多数据库中会用到,比如可能用mysql数据,pg数据库等
多个插入:
Mapper:
void mergeReportParamBach(@Param("reportParamList") List<ReportParam> reportParamList);
Xml:<insert id="mergeReportParamBach" databaseId="mysql">
insert into report_param (PARAM_ID, PARAM_NAME,SORT_ID, CLASS_ID)values<foreach collection="sysReportParamList" item="item" index="" separator=",">(#{item.paramId}, #{item.paramName},#{item.sortId}, #{item.classId})</foreach>ON DUPLICATE KEY UPDATEPARAM_ID=VALUES(PARAM_ID),PARAM_NAME=VALUES(PARAM_NAME),SORT_ID=VALUES(SORT_ID),CLASS_ID=VALUES(CLASS_ID)
</insert>
区别:
1, insert .. on deplicate udpate保留了所有字段的旧值,再覆盖然后一起insert进去,而replace没有保留旧值,直接删除再insert新值。
2, 从执行效率上来讲,replace要比insert .. on deplicate update效率要高,但是在写replace的时候,字段要写全,防止老的字段数据被删除。
3, insert .. on deplicate update 更为通用,兼容性更好,udal 不支持 replace的语法。如果有使用udal的话,必须得使用 insert .. on deplicate update
总结:
为了兼容udal的mysql数据库,需要使用 insert .. on deplicate update的方式。虽然写法有些繁琐,尤其列很多的时候。这时候可以试着用java写注解的方式,动态用程序去拼接 update 后的字段。
但是对于可能切换各种数据库(比如mysql、oracle和pg等)的时候,还是用基础的方式去写,就不用考虑各种数据库不同的写法了,参考 数据操作,使用不同数据库处理方式
Mysql replace/insert into 插入修改数据相关推荐
- MySQL学习笔记-约束以及修改数据表
MySQL学习笔记-约束以及修改数据表 约束: 按功能划为: NOT NULL , PRIMARY KEY , UNIQUE KEY , DEFAULT , FOREIGN KEY 按数据列的数目划为 ...
- Mysql脚本循环批量插入数组数据
Mysql脚本循环批量插入数组数据 涉及到Mysql知识点 脚本研究背景 Mysql完整脚本 ·首次写博客,不知道说点啥,直接上点干货,希望大家指出不足之处,共同进步. 涉及到Mysql知识点 存储过 ...
- mysql关联表删除、修改数据
mysql关联表删除.修改数据 关联删除 关联修改 关联删除 -- 多表关联查询删除: -- from 前面用表名的别名才可以,否则会修改失败: DELETE s,u1 FROM stu as s I ...
- java删除数组的数据_java数组实现数据处理——显示数据追加插入修改数据删除数据...
java数组实现数据处理--显示数据追加插入修改数据删除数据 (2013-08-10 23:26:05) 标签: 手机博客 杂谈 数组处理2013年3月5日 20:03:14 import java. ...
- MySQL学习笔记 约束以及修改数据表
*** 约束保证数据的完整性和一致性 *** 约束分为表级约束和列级约束 *** 约束类型包括: NOT NULL(非空约束) PRIMARY KEY(主键约束) UNIQUE KEY(唯一约束) D ...
- MySQL优化:批量插入大数据4种实用、讲究方案的测试
简明:本文记录个人使用MySQL插入大数据总结较实用的方案,通过对常用插入大数据的4种方式进行测试,即for循环单条.拼接SQL.批量插入saveBatch().循环 + 开启批处理模式,得 ...
- mysql 更改一行_mysql怎么修改数据表里一行数据?
mysql中修改数据表里一行数据的方法:使用UPDATE语句,语法格式"UPDATE SET 字段 1=值 1 [,字段 2=值 2- ] [WHERE 子句 ] [ORDER BY 子句] ...
- MYSQL数据库(九)- 修改数据表名称、列名称
目录 一.修改列定义(modify col_name) 二.修改列类型(modify col_name) 三.修改列名称(change col_name) 三.修改表名称(rename table a ...
- linux mysql c语言 api_linux连接MySQL数据库(C语言 API 分析,动态插入修改数据)
#include #include #include #include #include #include #define DBHOST "localhost" #define D ...
- MySQL中,当update修改数据与原数据相同时会再次执行吗?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:powdba https://yq.aliyun.com/a ...
最新文章
- 新手建议学php吗,关于PHP新手学习的一些指导和建议,新手来我的
- debian 8 mysql_在Debian 8系统安装 nginx + php + mysql(MariaDB) 基本Web环境
- hadoop 提交程序并监控运行
- [vue] vue如何优化首页的加载速度?
- 关于春招 秋招面试的一些经验
- 一次开发、多端分发,阿里巴巴发布AliOS车载小程序
- python实现推荐系统代码_推荐系统之矩阵分解及其Python代码实现
- 搜索 —— 广搜的优化技巧
- 弹出新窗体 winform 1615018696
- Softmax回归与冗余性
- 查询表授权给谁了_SQL Server 全局临时表竞争条件漏洞利用
- LayaAir UI 组件 # RadioGroup 单选框按钮组
- 交叉表 mysql_MySql交叉表
- 颜色的前世今生4·孟塞尔色空间
- vs2010 vs2012 插件小番茄 visual assist x破解版下载
- git如何选择性合并_git - 如何挑选一系列提交并合并到另一个分支?
- 推荐育儿书《正面管教》
- 基本类型包装及数学工具类的使用
- 号码认证一键免密登录,让验证更简单!
- 如何实现背景/背景图片透明文字不透明
热门文章
- 微信视频文件保存在服务器吗,如何发送大的视频文件给朋友和家人
- bootstrap3-dialog 使用说明
- 苹果电脑安装windows双系统
- c语言指针作用域,C语言——指针常用方法小结和static和extern对全局变量和局部变量的作用...
- MySQL批量创建测试数据脚本
- 键盘切换不出中文输入法的解决方法
- python 因果推断_微软因果推理框架DoWhy入门
- jpgraph 折线图--解决中文乱码的问题(标题和图例)
- 泰拉瑞亚服务器config修改,泰拉瑞亚种子世界游戏配置修改教程
- Win10屏保设置位置在哪里可以找到