MySQL学习总结

lix_uan
• 阅读 802

数据库的三大范式

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

事务的并发问题

  • 脏读:事务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值会占用更多的字节,且会在程序中造成很多不符合预期的情况
点赞
收藏
评论区
推荐文章
OMG!Java高级开发岗必问知识点
目录1.Mysql2.CHAR与VARCHAR的区别?3.能说下myisam和innodb的区别吗?4.你能说下事务的基本特性和隔离级别吗?5.并发问题脏读、不可重复读、幻读?6.事务的隔离级别?7.说说自增主键、UUID?8.mysql的约束分类?9.drop、delete与tru
Stella981 Stella981
1年前
Redis和MySQL数据一致中出现的几种情况
1\.MySQL持久化数据,Redis只读数据redis在启动之后,从数据库加载数据。读请求:不要求强一致性的读请求,走redis,要求强一致性的直接从mysql读取写请求:数据首先都写到数据库,之后更新redis(先写redis再写mysql,如果写入失败事务回滚会造成redis中存在脏数据)2.MySQL和Redis
Wesley13 Wesley13
1年前
MySQL5.7 基础之二
设计范式:  第一范式:字段是原子性  第二范式:存在可用主键  第三范式:任何表都不应该有依赖于其它表非主键的字段创建数据库、设计数据表  字段:字段名、数据类型、约束(通过键来实现,而键其实可以当做索引来用)DDL:CREATE、DROP、ALTERDML:INSERT(REPLACE)、DELETE、UPDATE、SELE
Wesley13 Wesley13
1年前
MySQL事务与锁
事务的隔离级别SQL标准定义的4个隔离级别为:READUNCOMMITED(未提交读)事务中的修改,即使没有提交,对其他事务也都是可见的。事务可以读取未提交的数据,也被称为脏读。这个级别是隔离级别中最低的,实际情况基本不用。READCOMMITED(提交读)事务从开始直到提交之前,所做的任何修
Wesley13 Wesley13
1年前
MySQL隔离级别
事务具有ACID四种特性。但是Isolation并发可能引起如下问题:1.脏读允许读取到未提交的脏数据。2.不可重复读如果你在时间点T1读取了一些记录,在T2时再想重新读取一次同样的这些记录时,这些记录可能已经被改变、或者消失不见。3.幻读解决了不重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(
Stella981 Stella981
1年前
Spring 支持的事务隔离级别
并发事务所导致的问题:    当同一个应用程序或者不同应用程序中的多个事务在同一个数据集上并发执行时,可能会出现许多意外的问题并发事务所导致的问题可以分为下面三种类型:     脏读:对于两个事物T1,T2,T1 读取了已经被T2更新但还没有被提交的字段.之后,若T2回滚,T1读取的内容就是临时且无效的.
Wesley13 Wesley13
1年前
MySQL面试
范式1:原子性,表中的没一列都是不可分的,不能是数组,集合。范式2:在第一范式基础上,属性完全依赖于主键。范式3:非主属性不依赖于其它非主属性。(关系中不包含在其它关系中已包含的非主键信息)   比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)   这样一个表结构,就存在上述关系。 学号 所在院校
Wesley13 Wesley13
1年前
MySQL相关
一、数据库的三种范式第一范式:数据库表的每一列都是不可分割的基本数据项。第二范式:数据库表中的每个实例或行必须可以被惟一地区分,即主键。第三范式:要求数据库表中不包含已在其它表中已包含的非主关键字信息,即外键。二、存储过程存储过程是一个可编程的函数,它在数据库中创建并保存。优点有:1、存储过程能
Wesley13 Wesley13
1年前
Java相关面试题总结+答案(九)
【MySQL】164\.数据库的三范式是什么?第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。第二范式:属性完全依赖于主键(满足第一范式的前提下),即任意一个字段只依赖于表中的同一个字段。第三范式:任何非主属性不依赖于其它非主属性(满足第二范式的前提下)。即不存在传
京东云开发者 京东云开发者
2个月前
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
lix_uan
lix_uan
Lv1
学无止境,即刻前行
7
文章
4
粉丝
0
获赞