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值会占用更多的字节,且会在程序中造成很多不符合预期的情况
点赞
收藏

评论区

加载中...

相关推荐

MySQL面试

MySQL面试1.数据库的三范式是什么?tex第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。

OMG!Java高级开发岗必问知识点

目录1.Mysql2.CHAR与VARCHAR的区别?3.能说下myisam和innodb的区别吗?4.你能说下事务的基本特性和隔离级别吗?5.并发问题脏读、不可重复读、幻读?6.事务的隔离级别?7.说说自增主键、UUID?8.mysql的约束分类?9.drop、delete与tru

Redis和MySQL数据一致中出现的几种情况

1\.MySQL持久化数据,Redis只读数据redis在启动之后,从数据库加载数据。读请求:不要求强一致性的读请求,走redis,要求强一致性的直接从mysql读取写请求:数据首先都写到数据库,之后更新redis(先写redis再写mysql,如果写入失败事务回滚会造成redis中存在脏数据)2.MySQL和Redis

MySQL5.7 基础之二

设计范式:  第一范式:字段是原子性  第二范式:存在可用主键  第三范式:任何表都不应该有依赖于其它表非主键的字段创建数据库、设计数据表  字段:字段名、数据类型、约束(通过键来实现,而键其实可以当做索引来用)DDL:CREATE、DROP、ALTERDML:INSERT(REPLACE)、DELETE、UPDATE、SELE

MySQL隔离级别

事务具有ACID四种特性。但是Isolation并发可能引起如下问题:1.脏读允许读取到未提交的脏数据。2.不可重复读如果你在时间点T1读取了一些记录,在T2时再想重新读取一次同样的这些记录时,这些记录可能已经被改变、或者消失不见。3.幻读解决了不重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(

Spring 支持的事务隔离级别

并发事务所导致的问题:    当同一个应用程序或者不同应用程序中的多个事务在同一个数据集上并发执行时,可能会出现许多意外的问题并发事务所导致的问题可以分为下面三种类型:     脏读:对于两个事物T1,T2,T1 读取了已经被T2更新但还没有被提交的字段.之后,若T2回滚,T1读取的内容就是临时且无效的.