SQL模式
1. 语法支持类:
ONLY_FULL_GROUP_BY:
对于 group by 聚合操作,如果select中的列,having或者order by子句的列,没有在group by中出现,那么这个sql是不合法的;
ANSI_QUOTES
启用后,不能使用双引号来引用字符串,因为它被解释为识别符,作用与" ` " 一样
···
2. 数据检查类
NO_ZERO_DATE 等。
默认模式
-- 查看 MySQL 版本
SELECT VERSION();
-- 查看 sql_mode
SELECT @@sql_mode;
-- 修改当前会话的sql模式
SET GLOBAL sql_mode = ' ';
- 阶(order)是用来区分集合或谓词的阶数的概念。集合论是sql语言的特性;
0阶:行
1阶:行的集合;相当于表
2阶:表的集合;相当于库
如:表
create table test_group_by
(
id int(11) primary key auto_increment comment 'id',
s_id varchar(255) comment '学生id',
c_id varchar(32) comment '课程id',
score int(11) comment '分数'
);
s_id,c_id,score等 都是表记录里面的属性,属于0阶,也就是行的属性;在聚合操作group by之后(c_id),就直接将一个个元素划分成若干个子集(组),也就是1阶;组属性的平均值或者总和等计算性质属性是可以的;但是再次询问每个记录中(也就是0阶)的行属性,将个体的属性套用于团体之上,是不允许的;SQL的世界其实是层级分明的等级社会;
- 总结
- sql 严格区分层级,包括谓词逻辑中的层级(EXISTS),也包括集合中的层级(GROUP BY);
- 有了层级区分,适用于个体上的属性就不适用于团体了;
- 一般来说,单元素集合的属性和其唯一元素的属性是一样的,这种包含一个元素的集合让人觉得似乎没有必要特意当成集合来看待,但是为了保持理论的完整性,还是要严格区分元素和单元素集合;a != {a} !!!