MySQL insert or update SQL 示例

建表 

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

转载于:https://my.oschina.net/Listening/blog/681138

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值