values()
函数,获取的是待插入列的值;
想使用原值,直接写列名就好了;
举例:
-- 表结构
create table `dws_tst_dup_key`
(
`i_id` bigint unsigned not null auto_increment comment '自增ID',
`i_user_id` bigint not null default 0 comment '用户ID',
`i_age` int not null default 0 comment '用户年龄',
`ch_address` varchar(100) not null default '' comment '用户地址',
primary key (`i_id`),
unique key `uniq_uid` (`i_user_id`)
) engine = innodb
default charset = utf8mb4
collate = utf8mb4_unicode_ci
auto_increment = 1 comment '用户信息表';
-- 插入一条数据
insert into dws_tst_dup_key (i_user_id, i_age, ch_address)
values (1, 18, '北京');
-- on dup key update
insert into dws_tst_dup_key (i_user_id, i_age, ch_address)
values (1, 19, '西安')
on duplicate key update i_age = i_age,
ch_address = values(ch_address);
-- 经过这条修改之后
-- 用户的年龄还是18
-- 但是地址由'北京'变为'西安'了