创建一个合适的表,表中必须有唯一索引,因为更新的时候就依据唯一索引更新的

CREATE TABLE `biz_fund_split` (

`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',

`security_id` VARCHAR(40) NOT NULL COMMENT '基金ID',

`security_code` VARCHAR(40) NOT NULL COMMENT '基金代码',

`the_date` DATE NOT NULL COMMENT '生效日期',

`split_date` DATE NOT NULL COMMENT '拆分日期',

`split_object` VARCHAR(200) NULL DEFAULT NULL COMMENT '拆分对象',

`split_mode` VARCHAR(100) NULL DEFAULT NULL COMMENT '拆分类型',

`split_rate` DECIMAL(20,4) NULL DEFAULT NULL COMMENT '拆分比例',

`split_before_value` DECIMAL(20,4) NULL DEFAULT NULL COMMENT '拆分前净值',

`split_before_share` DECIMAL(20,4) NULL DEFAULT NULL COMMENT '拆分前份额',

`split_after_share` DECIMAL(20,4) NULL DEFAULT NULL COMMENT '拆分后份额',

`remark` VARCHAR(200) NULL DEFAULT NULL COMMENT '备注',

`last_modified_dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录时间戳',

PRIMARY KEY (`id`),

UNIQUE INDEX `idx_security_code_the_date` (`security_code`, `the_date`)

)

COMMENT='基金拆分与折算表'

COLLATE='utf8_general_ci'

ENGINE=MyISAM

AUTO_INCREMENT=23;

编写sql测试

insert into biz_fund_split (security_id, security_code, the_date,

split_date, split_object, split_mode,

split_rate, split_before_value, split_before_share,

split_after_share, remark)

values (?,?,?,?,?,?,?,?,?,?,?)

ON DUPLICATE KEY UPDATE

security_id=VALUES(security_id), split_date=VALUES(split_date), split_object=VALUES(split_object),

split_mode=VALUES(split_mode), split_rate=VALUES(split_rate), split_before_value=VALUES(split_before_value),

split_before_share=VALUES(split_before_share), split_after_share=VALUES(split_after_share), remark=VALUES(remark)

结合两个sql可以得出结论:ON DUPLICATE KEY UPDATE之后的字段少了UNIQUE INDEX中涉及的两个字段,判断insert还是update,是以这两个是否存在为标准,如果存在,即以这两个字段为update条件,更新其他的字段;如果不存在则直接插入。MySQL数据库为我们做了一层是否存在的判断,所以我们就不用先判断是否存在再更新还是插入。使用驱动包中特有的操作接口,传入对应的参数即可。

注意:这个写法有个问题,如果是批量提交插入或更新数据,那么自增的id字段会提前预留出批量数量大小的id区段,会导致自增id值不连续增加,所以使用这种方式时,最好是单条提交,防止id自增断断续续。

mysql insert or update_MySQL insert or update SQL 示例相关推荐

  1. mysql 批量update sql_批量更新sql |批量update sql

    zencart批量更新后台邮箱地址sql zencart批量更新后台邮箱地址sql UPDATE `configuration` SET `configuration_value` = '新邮箱地址' ...

  2. mysql批量insert bug_MySQL Bug insert into on duplicate key update 语法更新 text blob 大字段导致 MySQL crash...

    1. 背景 业务执行 SQL 导致 MySQL 进程 Crash,做故障切换后,新的主库又 Crash 了.查看 MySQL 错误日志,发现多次 Crash 时的堆栈相同,如下: Thread poi ...

  3. mysql批量更新,批量插入之replace语句/insert into... on duplicate key update语句

    mysql批量更新/插入数据有以下方法,使用这些方法批量插入数据/更新数据的时候就不用在代码层次增加判断数据是否已存在的逻辑了. 1:replace语句 2: insert into... on du ...

  4. MySQL插入语句insert into,insert ignore into,insert into ... on duplicate key update,replace into-解决唯一键约束

    文章目录 常用插入语句 insert into insert ignore into insert into ... on duplicate key update replace into 使用场景 ...

  5. mysql使用INSERT INTO ON DUPLICATE KEY UPDATE导致dead lock分析和解决

    一.事件回放 2019年1月的几天时间里每天会收到1次或者2次死锁的短信告警,死锁日志如下图. 二.检查业务场景和程序处理流程 用户打赏礼物请求处理,涉及到用户余额表和佣金账户表,以下所有操作在一个事 ...

  6. go语言批量写入mysql, 记录不存在insert, 已存在则update

    go语言批量写入mysql, 记录不存在insert, 已存在则update, 拼sql有点麻烦,但是处理速度非常快. func WrapStringInSymbol(Symbo1Start , st ...

  7. mysql insert into on_MySQL之INSERT INTO ON DUPLICATE KEY UPDATE用法详解 | 夕辞

    MySQL数据库使用中如果主键或唯一键冲突,会报错,因此我们会用到insert into on duplicate key update语法,但是该语法具体怎么用以及返回什么值,今天就来讨论下. 首先 ...

  8. MySQL插入数据时,如果记录不存在则insert,如果存在则update

    MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法. 第一种: 示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的 ...

  9. mysql 中 replace into 与 insert into on duplicate key update 的使用和不同点

    replace into和insert into on duplicate key update都是为了解决我们平时的一个问题 就是如果数据库中存在了该条记录,就更新记录中的数据,没有,则添加记录. ...

  10. MySQL · 案例分析 · RDS MySQL线上实例insert慢常见原因分析

    概述 insert慢是经常被问到的问题,笔者尝试在本文中对这个问题做一个分类梳理,列举的线上例子会做简化,希望对读者有所启发. 注意:因为阿里云MySQL线上实例还是以RDS 5.6为主体,本文的分析 ...

最新文章

  1. 石头机器人拖地水量调节_石头扫地机器人T7上手体验:电控水箱和超大容量,扫拖一体全能型...
  2. 赋值语句和赋值表达式
  3. java动态代理(JDK和cglib)详解
  4. String,StringBuffer和StringBuilder区别?
  5. JavaBean网页电子时钟
  6. MySQL slave_exec_mode 参数说明
  7. 迈入现代 Web 开发(GMTC 2021 演讲全文)
  8. 列表、字典补充点、strJoin方法、set()集合、和深浅拷贝
  9. springboot 多线程_机密文档!阿里产出SpringBoot/Cloud,细节爆炸
  10. php框架加滑动条,IOS_iOS实现双向滑动条效果,最近做项目,碰到一种双向滑 - phpStudy...
  11. 读书笔记 之《Thinking in Java》(对象、集合、异常)
  12. 使用 :after伪元素撑开 div
  13. 电信光猫桥接+ML固件路由器实现ipv6网站访问
  14. note : FAILED宏 和 SUCCEEDED宏 的使用细节
  15. Referrer、Referrer-policy
  16. 装修小知识 杜绝厨房装修遗憾
  17. Lock-step 锁步核有哪些
  18. 增强For循环以及集合遍历语法糖
  19. vcruntime140_1.dll 丢失的解决办法
  20. java服务器端集成微信小程序

热门文章

  1. PTA 程序设计天梯赛(121~140题)
  2. Kotlin — 适用于数据科学
  3. SQL Sever — 上课笔记【主键、外键、唯一性约束、检查约束】
  4. L1-027 出租 (20 分)—团体程序设计天梯赛
  5. gcc编译c文件生成可执行文件
  6. [POJ2559POJ3494] Largest Rectangle in a HistogramLargest Submatrix of All 1’s 「单调栈」
  7. python学习笔记:第21天 常用内置模块之collections和time
  8. bzoj 1093 [ ZJOI 2007 ] 最大半连通子图 —— 拓扑+DP
  9. Go---第六章:方法(小知识点笔记)
  10. BZOJ(本校) 3046 简单数学问题 - 线段树