1 MySQL建议default null吗?
答:不建议
- null会占用额外的存储空间
- 对含有null值的列进行统计计算,例如count(),max(),min(),结果并不符合我们的期望值
- 有时候为了消除null带来的技术负债,我们需要在SQL中使用IFNULL()来确保可控,但是这使程序变的复杂
所以建议使用NOT NULL消除默认设置,或者使用0或者''空字符串来代替NULL
2 MySQL中主键和唯一键的区别?
- 一个表只能有一个主键,但是可以有多个唯一键
- 主键不可以为null,但是唯一键可以为null
- 对于MySQL的Innodb引擎来讲,主键生成的是聚簇索引,唯一键生成的是非聚簇索引
3 主键和外键的区别?
- 主键可以标识记录的唯一性,且不能为空
- 外键是另一个表的主键,是对表的一种范围性约束,外键可以重复,可以为null
4 和null相关的计算
- 不能用=、<、>、<>和null做计算,任何值(包括和null)和null做函数运算结果都是null
- 需要使用is null,is not null ,isnull(),<=>(等于的意思)
- 对于还有null的列,count(column-name)统计所在列non-null的记录数,count(distinct(column-name))统一所在列non-null的记录数,且去重;count()和count(1)一样都是统计所有数据的行数,包含null
5 SQL的执行顺序?
- from 子句组装来自不同数据源的数据
- where 子句基于指定的条件对记录行进行筛选
- group by 子句讲数据划分为多个分组
- 使用聚合函数进行计算
- 使用having子句筛选分组
- 计算所有表达式
- select的字段
- 使用order by对结果集进行排序
! order by后面默认升序
6 MySQL常用内置函数
- concat(s1,s2...n):连接字符串
- round(x[,y]):四舍五入,y为需要保留的小数
- date_format(d,"format"):按照表达式要求显示日期
- day(d):返回日期值的日期部分
- dayofmonth(d):返回日期值是本月的第几天
- last_day(d):返回给定日期的那一月份的最后一天
- now():返回当前日期和时间
- upper(s):将字符串转换为大写
- lower(s):将字符串转换为小写
- trim(s):去掉字符串左右两边的空格