MySQL更新语句中被更新字段作为判断条件值是更新前还是更新后?
update demo
set
qty = 1,
remark = if(qty>=0,'大于等于0','小于0')
where
id = 1000;
即上述update语句,if中的qty是变更前的的值-1,还是变更后的值1?
经过测试验证,答案是:qty的取值与赋值的顺序有关,把它理解成一个update函数,每个字段是一行,顺序执行,取当前变量最新的值。也就是说上述例子,qty的取值是变更后的1,而下面的写法则是变更前-1。
update demo
set
remark = if(qty>=0,'大于等于0','小于0'),
qty = 1
where
id = 1000;
可以使用下面的sql进行测试:
- 结果为变更后
-- 建表
drop table if exists `demo`;
create table `demo`(
`id` bigint(20) not null auto_increment comment '主键id',
`qty` int(4) not null default '0' comment '数量',
`remark` varchar(32) not null default '' comment '备注',
primary key (`id`)
) engine=innodb auto_increment=1000 default charset=utf8mb4 comment='demo表';
-- 插入测试数据
insert into demo (qty,remark) values (-1,'');
-- 更新语句
update demo
set
qty = 1,
remark = if(qty>=0,'大于等于0','小于0')
where
id = 1000;
-- 查看结果
select * from demo where id = 1000;
- 结果为变更前
-- 建表
drop table if exists `demo`;
create table `demo`(
`id` bigint(20) not null auto_increment comment '主键id',
`qty` int(4) not null default '0' comment '数量',
`remark` varchar(32) not null default '' comment '备注',
primary key (`id`)
) engine=innodb auto_increment=1000 default charset=utf8mb4 comment='demo表';
-- 插入测试数据
insert into demo (qty,remark) values (-1,'');
-- 更新语句
update demo
set
remark = if(qty>=0,'大于等于0','小于0'),
qty = 1
where
id = 1000;
-- 查看结果
select * from demo where id = 1000;