MySQL的另类语法

SQL标准 (SQL-92/99)规定:SELECT 列表里的所有字段,要么出现在 GROUP BY 中,要么被聚合函数(MAX/MIN/COUNT 等)包裹。

select id,max(a1) as a1,a2 from a group by id

这句话在任何非MySQL数据库里执行都是语法错。然而MySQL支持。 a2会随机取一行数据的值。当a2和id绑定都是唯一时,这种写法就很简单,但是当a2有多个值时,这个结果是不确定的,也就是今天执行和明天执行,结果可能不一样。

不知道最初MySQL开放者如何脑洞打开,放开了这个限制。而且很多早期开发人员居然也利用了这个特性,导致现在的MySQL也得支持这个特性。当然引入了ONLY_FULL_GROUP_BY参数来进行控制。

系统设计中有很多这样的案例,为了一点微不足道的灵活性,破坏了规则的完整性。个人不建议这么做。如同所有的非MySQL数据库都严格执行,只有MySQL选择了另类。

相关推荐
Seraphina365 小时前
SQL注入(一)
数据库·经验分享·笔记·sql·网络安全
anew___5 小时前
《从零手写操作系统 (19):Ext2文件系统实战——从内存到磁盘的跨越》
java·服务器·前端·数据库·算法
Arcai10245 小时前
SQL Server 备份和恢复完全指南:从入门到精通
数据库·sqlserver·数据恢复·数据备份·备份一体机·杭州智备
XS0301065 小时前
Redis 学习指南
数据库·redis·缓存
FPGA小徐5 小时前
Qt 5.9 实战:实现一个自动图片轮播器
数据库
FYKJ_20105 小时前
SSM校园互助与闲置交易平台62145-计算机课程设计、毕业设计
java·spring boot·python·mysql·架构·spark·课程设计
l1t5 小时前
DeepSeek总结的pg_clickhouse 与 chdb 更新:编码、嵌套与类型
数据库·clickhouse·postgresql
傲世仙尊5 小时前
从HTTPS到MySQL-会话保持的攻防与数据库的真面目
数据库·mysql·https
jyOverQ5 小时前
MySQL 崩溃以后怎么恢复数据?redo log、undo log 与 Crash Recovery
数据库·mysql
盟道科技5 小时前
电商小程序购物车系统设计:缓存与数据库双写一致性实战
数据库·缓存·小程序