文档章节

MySQL insert or update SQL 示例

L
 Listen_ing
发布于 2016/05/25 17:14
字数 519
阅读 128
收藏 6

建表 

  • 创建一个合适的表,表中必须有唯一索引,因为更新的时候就依据唯一索引更新的
  • 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自增断断续续。

over! 

© 著作权归作者所有

L
粉丝 13
博文 28
码字总数 53225
作品 0
宝山
程序员
私信 提问
MySql避免重复插入记录的几种方法

本文章来给大家提供三种在mysql中避免重复插入记录方法,主要是讲到了ignore,Replace,ON DUPLICATE KEY UPDATE三种方法,有需要的朋友可以参考一下 方案一:使用ignore关键字 如果是用主键p...

凯文加内特
2016/01/09
191
0
mysql-之触发器_已迁移

mysql 触发器 当发生某个事件(增删更查)时可以执行定义的sql语句 ===============总结 无情的分隔线 总结======================== 一、触发器作用 MySQL包含对触发器的支持。触发器是一种与...

鬼谷子灬
2016/06/29
14
0
MySql避免重复插入记录的几种方法

本文章来给大家提供三种在mysql中避免重复插入记录方法,主要是讲到了ignore,Replace,ON DUPLICATE KEY UPDATE三种方法,有需要的朋友可以参考一下 方案一:使用ignore关键字 如果是用主键p...

messi_10
2016/01/11
61
0
Golang 学习笔记(10)—— mysql操作

本文为转载,原文:Golang 学习笔记(10)—— mysql操作 Golang go-sql-driver/mysql go操作mysql的驱动包很多,这里讲解当下比较流行的go-sql-driver/mysql 安装 执行下面两个命令: 安装完...

ChainZhang
2018/01/04
0
0
执行一条sql语句update多条记录实现思路

执行一条sql语句update多条记录实现思路 如果你想更新多行数据,并且每行记录的各字段值都是各不一样,你会怎么办呢?本文以一个示例向大家讲解下如何实现如标题所示的情况,有此需求的朋友可...

bigTreee
2015/07/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C 语言 二级指针操作文件 柔性数组使用

#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct _info* pInfo;struct _info{int line;int len;char data[0];}info;int getFil......

小张525
27分钟前
0
0
中介者模式

https://blog.csdn.net/jason0539/article/details/45216585

南桥北木
27分钟前
0
0
抽离css以及公共js

分离css 分离css:为何要把 CSS 文件分离出来,而不是直接一起打包在 JS 中。最主要的原因是我们希望更好地利用缓存。 extract-text-webpack-plugin > 1. 假设我们原本页面的静态资源都打包成...

莫西摩西
今天
1
0
Jenkins的配置从节点中默认没有Launch agent via Java Web Start,该如何配置使用

Jenkins的配置从节点中默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的。 如何设置才能让出来呢? 1:打开"系统管理"——"Configure Global Sec...

shzwork
今天
2
0
BAT面试必问HashMap源码分析

HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈...

别打我会飞
今天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部