楼上大致正确,但是
1.前者也是通用的,但要多写一些 setXXX 的代码;
2.第二种方式在并发情况下容易导致前面的update失效,除非整个过程加锁:
请求1:
update Student set name="李四";
请求2:
update Student set name="张三",sex=0,weight="120" where id='123';
期望结果:
name="李四",sex=0,weight="120" where id='123'
实际结果:
"张三",sex=0,weight="120" where id='123'
原因:
请求2 setXXX 时,请求1正在执行SQL语句update1,这时候MySQL会加锁。
等到update1执行完后,请求2的SQL语句update2再执行,导致原本update1修改后的
name="李四"又被update2改回了name="张三"。
所以如果要用完整更新,请求2必须在setXXX前加锁,让update1在update2完成后才执行,这样才能避免并发情况下导致前面的update失效的问题。