环境
Mysql5.7
1 想让一个变量自加怎么办?
select 然后update?不,mysql可以帮我们做
update tableA set a=a+1;
这样就可以了
不过小心查询优化器会改变顺序哦
例如
update tableA set a=a+1 ,b=case when a>1 then 0 else 1 end;
假设表中a=0
,那么b的赋值语义是不明确的,这里的a
是以前的a还是已经更新过的a?
我自己实践了一下,是更新过的a,所以还是要小心这里的逻辑
2 如何让一条数据存在就更新,不存在就插入?
select 判断一下,在决定操作?不,mysql还是可以帮我们做
insert into tableA (uk,a) values
('uk',1)
ON DUPLICATE KEY UPDATE
a=2
这样操作需要将某个键设置为UNIQUE KEY
或者依据PRIMARY KEY
来判断是否重复
例如上面插入unique key 为uk的字段,值为'uk'
,数据库中如果有这条数据,就会把a更新为2,如果没有,就会插入这么一条数据
这个操作是mysql的扩展功能
关于他的返回数据
如果插入成功->1
如果更新成功->2
如果更新的值没有变化->0