Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!

MySQL面试题 PDF 下载


分享到:
时间:2021-01-22 10:10来源:http://www.java1234.com 作者:转载  侵权举报
MySQL面试题 PDF 下载
失效链接处理
MySQL面试题 PDF 下载


本站整理下载:
提取码:v23r 
 
 
相关截图:
 
主要内容:

数据库概念 1. ACID 讲⼀下
(阿⾥校招) ACID是事物的四个特性。分别是 原⼦性(Atomicity)、⼀致性(Consistency)、隔离性 (Isolation)、持久性(Durability) 。  原⼦性是指事物是⼀个不可分割的⼯作单位,事物中的操作要么都发⽣,要么都不发⽣。 最经典的就是转账案例,我们把转⼊和转出当做⼀个事物的话,就需要在SQL中显式指定 开启事务。  ⼀致性是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的⼀致性 。我们可以从 数据库层⾯和业务层⾯两⽅⾯来保证,数据库层⾯我们可以设置触发器,外键,表,⾏约 束等来保证,业务层⾯就是我们Java⼯程师的⼯作啦  隔离性指的是多个事务并发访问时,事务之间是隔离的,⼀个事务不应该影响其它事务运 ⾏效果。 多个事务并发访问时,事务之间是隔离的,⼀个事务不应该影响其它事务运⾏效 果。 这个点⼜引申出了下⾯两道题,以及后边的加锁和阻塞  持久性意味着即使出现了任何事故⽐如断电等,事务⼀旦提交,则持久化保存在数据库 中,不会被回滚 2. 说⼀下脏读,不可重复读和幻读
 脏读: 意味着⼀个事务读取了另⼀个事务未提交的数据,⽽这个数据是有可能回滚的。即 这个事物读取的数据是不正确的  不可重复读: 在数据库访问中,⼀个事务范围内两个相同的查询却返回了不同数据。这是 由于查询时系统中其他事务修改的提交⽽引起的。即这个事物在读的过程中被修改了  幻读:当⼀个事物对整个table进⾏修改之后,第⼆个事物向表中插⼊了⼀⾏数据,此时第 ⼀个事物发现了新插⼊的没有修改的数据⾏,好像发⽣了幻觉⼀样 3. 数据库的隔离级别
读未提交RU  ⼀个事务还没提交时,它做的变更就能被别的事务看到  会出现幻读,不可重复读,脏读  更新数据时加上⾏级共享锁,事物结束即释放 读已提交RC  ⼀个事务提交之后,它做的变更才会被其他事务看到  会出现幻读,不可重复读,不会出现脏读  写数据加⾏级排他锁,这样写过程是⽆法读取的,直到事务处理完毕才释放排他锁,给 读的数据加⾏级共享锁,这样读的时候也是⽆法写的,但是⼀旦读完该⾏就释放共享锁  MySQL会在SQL语句开始执⾏时创建⼀个视图 可重复读RR
 ⼀个事务执⾏过程中看到的数据,总是跟这个事务在启动时看到的数据是⼀致的  会出现幻读,不会出现不可重复读,脏读  给写的数据加⾏级排他锁,事务结束释放,给读的数据加⾏级共享锁,事务结束后释放  MySQL会在事物开始时创建⼀个⼀致性视图(接下⾯的MVCC),事物结束时销毁 可串⾏化S  当出现读写锁冲突的时候,后访问的事务必须等前⼀个事务执⾏完成,才能继续执⾏  不会出现幻读,不可重复读,脏读  事务读数据则加表级共享锁,事务写数据则加表级排他锁  不区分快照度与当前读 其中,Oracle和SQLServer都是读已提交,但MySQL默认的隔离级别是可重复读 ,这是⼀个 MySQL5.0之前的上古遗留版本问题。当时的binlog只有STATEMENT格式,⽤RC会出现 bug。 当⾯试官问我们项⽬⽤的哪个隔离级别,就我⾃⼰来说,如果看我之前的⽂章,我写过我搭建 了⼀个博客,对于博客来说,我肯定要说读已提交。这样的并发度更⾼,同时,在我们的互联 ⽹项⽬中可以接受重复读带来的⼀些不便。 同时,既然问到了数据库的隔离级别,那么离下⾯的锁也不远了 4. 三⼤范式
 第⼀范式: 所有字段值都是不可分解的原⼦值 。例如有⼀个列是电话号码⼀个⼈可能有 ⼀个办公电话⼀个移动电话。第⼀范式就需要拆开成两个属性。  第⼆范式:⾮主属性完全函数依赖于候选键。如PersonID,ProductID,ProductName, PersonName可以看到,OrderID和ProductID是联合主键,但是ProductName是依赖于 ProductID的,只依赖了部分主键,没有依赖全部主键。需要拆分成三个表: PersonID, PersonName , ProductID, ProductName 和 PersonID, ProductID  第三范式: 每⼀列数据都和主键直接相关,⽽不能间接相关  如OrderID,ProductID,ProductName,OrderID是主键,但是ProductID依赖了 OrderID,⽽ProductName依赖了ProductID,等于说是间接依赖了OrderID,所以需要拆 分为两个表: OrderID, ProductID 和 ProductID, ProductName 这⾥需要指明范式不是最好的,我们需要混合使⽤范式和反范式  范式的优点:因为相对来说有较少的重复数据,范式化的更新操作要⽐反范式快。同时范 式化需要更少的distinct和order by  范式化缺点:通常需要关联,不仅代价昂贵,也可能会使的⼀些索引⽆效 常⽤的反范式⽅法:  复制:在两个表中根据实际业务情况存储部分相同的字段列,即有利于查询,也不会把 表搞的太⼤  缓存:对于需要多次join查询的表,可以在⼀个表中加⼊⼀个缓存列,⽤来缓存所join 表的部分常⽤数据,如count等,我们需要实时更新该缓存

 
 
------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐