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 的具体值