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

无敌铃铃后

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

阅读量:437

点赞量:14

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