Mysql 个人花里胡哨的操作记录

环境

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

你可能感兴趣的:(Mysql 个人花里胡哨的操作记录)