mysql知识与细节整理

来源:互联网 发布:苏宁算法工程师面试 编辑:程序博客网 时间:2024/04/25 09:49

1.having和where的区别在于having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用where先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用having进行再过滤.

2.左连接包含所有左边表中的记录甚至是右边表中没有和它匹配的记录.

3.union和union all的主要区别是union all是把结果集直接合并在一起,而union是将union all后的结果进行一次distinct,去除重复记录后的结果.

4.列如果设置了宽度限制,如果插入大于宽度限制的值,会自动扩容,不会对插入数据的精度产生影响.

5.将列设置为无符号的时候,上限会是原来的两倍,例如tinyint有符号的范围是-128~+127,而无符号范围是0~255.

6.mysql的小数分为两种,浮点数:float,double;定点数:decimal.浮点数和定点数都可以用类型名称后加(M,D)的方式来进行表示一共显示M位数字(整数+小数位),其中D位位于小数点后面,M和D又称为精度和标度,如果浮点数不写精度和标度,则会按照实际精度显示,如果有精度和标度,则会自动将四舍五入后的结果插入,系统不会报错,定点数如果不写精度和标度,则会默认值decimal(10,0)来进行操作,并且如果数据超过了精度值和标度值,系统则会报错.

7.

8.char和varchar的区别,在检索的时候char会删除尾部的空格,而varchar会保留.

9.运算符的优先级有很多,通常情况我们都是用'()'将需要优先的操作括起来,另外比较常用的优先级为not > and > or .