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 插入修改数据相关推荐

  1. MySQL学习笔记-约束以及修改数据表

    MySQL学习笔记-约束以及修改数据表 约束: 按功能划为: NOT NULL , PRIMARY KEY , UNIQUE KEY , DEFAULT , FOREIGN KEY 按数据列的数目划为 ...

  2. Mysql脚本循环批量插入数组数据

    Mysql脚本循环批量插入数组数据 涉及到Mysql知识点 脚本研究背景 Mysql完整脚本 ·首次写博客,不知道说点啥,直接上点干货,希望大家指出不足之处,共同进步. 涉及到Mysql知识点 存储过 ...

  3. mysql关联表删除、修改数据

    mysql关联表删除.修改数据 关联删除 关联修改 关联删除 -- 多表关联查询删除: -- from 前面用表名的别名才可以,否则会修改失败: DELETE s,u1 FROM stu as s I ...

  4. java删除数组的数据_java数组实现数据处理——显示数据追加插入修改数据删除数据...

    java数组实现数据处理--显示数据追加插入修改数据删除数据 (2013-08-10 23:26:05) 标签: 手机博客 杂谈 数组处理2013年3月5日 20:03:14 import java. ...

  5. MySQL学习笔记 约束以及修改数据表

    *** 约束保证数据的完整性和一致性 *** 约束分为表级约束和列级约束 *** 约束类型包括: NOT NULL(非空约束) PRIMARY KEY(主键约束) UNIQUE KEY(唯一约束) D ...

  6. MySQL优化:批量插入大数据4种实用、讲究方案的测试

         简明:本文记录个人使用MySQL插入大数据总结较实用的方案,通过对常用插入大数据的4种方式进行测试,即for循环单条.拼接SQL.批量插入saveBatch().循环 + 开启批处理模式,得 ...

  7. mysql 更改一行_mysql怎么修改数据表里一行数据?

    mysql中修改数据表里一行数据的方法:使用UPDATE语句,语法格式"UPDATE SET 字段 1=值 1 [,字段 2=值 2- ] [WHERE 子句 ] [ORDER BY 子句] ...

  8. MYSQL数据库(九)- 修改数据表名称、列名称

    目录 一.修改列定义(modify col_name) 二.修改列类型(modify col_name) 三.修改列名称(change col_name) 三.修改表名称(rename table a ...

  9. linux mysql c语言 api_linux连接MySQL数据库(C语言 API 分析,动态插入修改数据)

    #include #include #include #include #include #include #define DBHOST "localhost" #define D ...

  10. MySQL中,当update修改数据与原数据相同时会再次执行吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:powdba https://yq.aliyun.com/a ...

最新文章

  1. 新手建议学php吗,关于PHP新手学习的一些指导和建议,新手来我的
  2. debian 8 mysql_在Debian 8系统安装 nginx + php + mysql(MariaDB) 基本Web环境
  3. hadoop 提交程序并监控运行
  4. [vue] vue如何优化首页的加载速度?
  5. 关于春招 秋招面试的一些经验
  6. 一次开发、多端分发,阿里巴巴发布AliOS车载小程序
  7. python实现推荐系统代码_推荐系统之矩阵分解及其Python代码实现
  8. 搜索 —— 广搜的优化技巧
  9. 弹出新窗体 winform 1615018696
  10. Softmax回归与冗余性
  11. 查询表授权给谁了_SQL Server 全局临时表竞争条件漏洞利用
  12. LayaAir UI 组件 # RadioGroup 单选框按钮组
  13. 交叉表 mysql_MySql交叉表
  14. 颜色的前世今生4·孟塞尔色空间
  15. vs2010 vs2012 插件小番茄 visual assist x破解版下载
  16. git如何选择性合并_git - 如何挑选一系列提交并合并到另一个分支?
  17. 推荐育儿书《正面管教》
  18. 基本类型包装及数学工具类的使用
  19. 号码认证一键免密登录,让验证更简单!
  20. 如何实现背景/背景图片透明文字不透明

热门文章

  1. 微信视频文件保存在服务器吗,如何发送大的视频文件给朋友和家人
  2. bootstrap3-dialog 使用说明
  3. 苹果电脑安装windows双系统
  4. c语言指针作用域,C语言——指针常用方法小结和static和extern对全局变量和局部变量的作用...
  5. MySQL批量创建测试数据脚本
  6. 键盘切换不出中文输入法的解决方法
  7. python 因果推断_微软因果推理框架DoWhy入门
  8. jpgraph 折线图--解决中文乱码的问题(标题和图例)
  9. 泰拉瑞亚服务器config修改,泰拉瑞亚种子世界游戏配置修改教程
  10. Win10屏保设置位置在哪里可以找到