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











猜你喜欢

转载自blog.csdn.net/u010343544/article/details/78269559