MySQL基础

104 阅读2分钟

1 MySQL建议default null吗?

答:不建议

  1. null会占用额外的存储空间
  2. 对含有null值的列进行统计计算,例如count(),max(),min(),结果并不符合我们的期望值
  3. 有时候为了消除null带来的技术负债,我们需要在SQL中使用IFNULL()来确保可控,但是这使程序变的复杂

所以建议使用NOT NULL消除默认设置,或者使用0或者''空字符串来代替NULL

参考链接

2 MySQL中主键和唯一键的区别?

  1. 一个表只能有一个主键,但是可以有多个唯一键
  2. 主键不可以为null,但是唯一键可以为null
  3. 对于MySQL的Innodb引擎来讲,主键生成的是聚簇索引,唯一键生成的是非聚簇索引

3 主键和外键的区别?

  1. 主键可以标识记录的唯一性,且不能为空
  2. 外键是另一个表的主键,是对表的一种范围性约束,外键可以重复,可以为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的执行顺序?

  1. from 子句组装来自不同数据源的数据
  2. where 子句基于指定的条件对记录行进行筛选
  3. group by 子句讲数据划分为多个分组
  4. 使用聚合函数进行计算
  5. 使用having子句筛选分组
  6. 计算所有表达式
  7. select的字段
  8. 使用order by对结果集进行排序

! order by后面默认升序

6 MySQL常用内置函数

  1. concat(s1,s2...n):连接字符串
  2. round(x[,y]):四舍五入,y为需要保留的小数
  3. date_format(d,"format"):按照表达式要求显示日期
  4. day(d):返回日期值的日期部分
  5. dayofmonth(d):返回日期值是本月的第几天
  6. last_day(d):返回给定日期的那一月份的最后一天
  7. now():返回当前日期和时间
  8. upper(s):将字符串转换为大写
  9. lower(s):将字符串转换为小写
  10. trim(s):去掉字符串左右两边的空格