Mysql冲突更新_mysql 主键冲突更新

mysql的特殊功能,在主键冲突的情况下,可以根据主键进行更新数据

建表语句:

-- -----------------------------------------------

-- 全量脚本

-- -----------------------------------------------

-- 创建表 tb_day_hold(持仓表)的当前表

SELECT 'Create Table tb_day_hold-持仓表...';

DROP TABLE IF EXISTS tb_day_hold;

CREATE TABLE tb_day_hold

(

firm_account smallint DEFAULT 0 NOT NULL,

seat_no varchar(8) DEFAULT ' ' NOT NULL,

stock_account varchar(15) DEFAULT ' ' NOT NULL,

exchange_type varchar(4) DEFAULT ' ' NOT NULL,

stock_name varchar(32) DEFAULT ' ' NOT NULL,

stock_code varchar(6) DEFAULT ' ' NOT NULL,

amount decimal(19,2) DEFAULT 0.0 NOT NULL,

market_value decimal(19,2) DEFAULT 0.0 ,

position_str varchar(100) DEFAULT ' ' NOT NULL,

PRIMARY KEY(stock_account, exchange_type, stock_code)

);

-- -----------------------------------------------

-- 升级脚本

-- -----------------------------------------------

新增或者更新的语句:

INSERT INTO tb_day_hold (

firm_account ,

seat_no ,

stock_account ,

exchange_type ,

stock_name ,

stock_code ,

amount ,

market_value ,

position_str

)VALUES (

#{firm_account } ,

#{seat_no } ,

#{stock_account } ,

#{exchange_type } ,

#{stock_name } ,

#{stock_code } ,

#{occur_amount } ,

#{market_value } ,

#{position_str }

)

ON DUPLICATE KEY UPDATE

amount = amount + VALUES(amount) , seat_no = VALUES(seat_no)

;

注意:

表中的列名称是amount,我传递去的是occur_amount

在主键冲突的情况下,使用 ON DUPLICATE KEY UPDATE

注意,后面没有 SET 关键字

在主键冲突的情况下,我需要 amount=amount+occur_amount,在SQL语句中使用的是 amount = amount + VALUES(amount)

其中 VALUES(amount) 就为我传递进入的 occur_amount 的具体值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值