update set name = 'xxx' where id = 1 and is_delete = 0 where后面同时用了两个字段id和is_delete,锁表还是锁行?

新手上路,请多包涵

**
我发现mysql的group by 后面的字段没有严格要求,甚至select后面的字段可以不出现在group by后面**

阅读 763
1 个回答

当然是锁行了,要是筛选出来要更新的行数就只有一行,把整个表锁住代价也太大了,筛选出了哪些行就锁哪些行,这样其他行不会受影响。
mysql5.7版本之后默认开启了ONLY_FULL_GROUP_BY策略,即:
SELECT语句中的字段必须要么出现在GROUP BY子句中,要么作为聚合函数的参数。
这个策略的目的是确保查询结果的准确性和一致性,并避免在查询中使用模糊的或不确定的字段。
所以你的说法适用于mysql5.7之前的版本,但是建议你都写上,避免不同的Mysql版本之间同样的语句不同的结果(亲身经历,本地是mysql5.6不加不报错,生产上是mysql5.7报错了)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题