MySQL学习总结

数据库的三大范式

  • 第一范式:每个列都不可以再拆分
  • 第二范式:在第一范式的基础上,非主键列完全依赖于主键
  • 第三范式:在第二范式上,非主键列只依赖主键,不依赖其他非主键

事务的并发问题

  • 脏读:事务A读取了事务B更新的数据,然后数据B回滚,那么A读到的是脏数据
  • 不可重复读:事务A多次读取同一数据,事务B在事务A读取的过程中对数据进行了修改并提交,导致A多次读的数据不一样
  • 幻读:事务A读取数据的时候,事务B增添了数据,导致A读完后发现还有数据没读
  • 不可重复读侧重于修改,幻读侧重于新增或删除
  • 解决不可重复读只需要锁行,而解决幻读需要锁表

事务的隔离级别

事务隔离级别 脏读 不可重复读
读未提交
不可重复读
可重复读
串行化

b-tree、b+tree的区别

  • b-tree的关键字、索引和记录是放在一起的
  • b+tree的记录只放在叶子节点中,而非叶子节点中只有关键字和指向下一个节点的索引
  • b-tree中越靠近根节点的记录查找事件越快,只要找到关键字即可确定记录的存在
  • b+tree中每个记录的查找事件基本一样,都需要从根节点走到叶子节点
  • b+tree的磁盘读写代价更低,查询效率更加稳定,b+tree更适合建索引

drop、delete、truncate的区别

  • 不需要再用一张表时直接用drop删除
  • 删除所有数据,但是保留表结构用truncate
  • 想删除部分数据的时候用delete

union和union all的区别

  • union会多获取的数据进行去重和排序
  • union all会保留所有查询结果,并不会进行去重和排序
  • 在不去重的前提下,union all的效率要高一些

char和varchar的区别

  • char,定长,固定长度的字符串推荐使用char类型存储,节省空间且效率高
  • varchar,不定长,效率低

字段为什么要定义成not null

  • null值会占用更多的字节,且会在程序中造成很多不符合预期的情况
上一篇:C语言中typedef union类型的使用方法


下一篇:【MySQL联合查询】合并查询数据记录