JAVA面试汇总之数据库(一)

数据库三大范式
  • 原子性,字段不可再分割
  • 完全依赖,没有部分依赖
  • 没有传递依赖
事务四大特性
  • 原子性:事务是一个最小单位,要么都完成,要么都不完成

  • 一致性:事务提交前后保持一致

  • 隔离性:当发生并发访问数据库时,相互之间不能被干扰,需要进行隔离

  • 持久性:事务一旦提交时永久保存

事务的隔离级别
  • 读未提交:可以读取未提交的数据
  • 读已提交:能读到已提交的数据
  • 可重复读:在并发读取数据时,看到同样的数据
  • 串行化:一个事务执行完才能执行下一个事务
事务的传播
  • REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,就加入到这个事务中。这是默认的选择。

  • SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。

  • MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常。

  • REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。

  • NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

  • NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

  • NESTED:如果当前存在事务,则在嵌套事务内执行。

MySQL和Oracle的区别
类型MySQLOracle
开源收费
自动增长有自动增长类型创建序列的方式
提交事务默认自动提交需要手动提交
表级锁为主行级锁
日期类型date、dateTimedate
内存占有较小较大
字符串使用单引号,双引号单引号
分页linitrownum( 只能小于,不能大于)
判断真假0,1true,false
简单介绍下(我)常用搜索引擎

InnoDB聚集索引:数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。

MyISAM是非聚集索引:数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

InnoDB引擎和MyISAM引擎的区别
InnoDB(MySQL默认)MyISAM
事务支持事务不支持事务
行锁表锁
索引没有索引,就自动生成6字节的主键(用户不可见允许没有索引
全文索引不支持支持
外键支持不支持
FULLTEXT类型不支持支持
聚集索引是( 必须要有主键
数据库的锁
  • 表锁:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低

  • 行锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高

  • 页锁:开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般

  • 悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作

  • 乐观锁:假定不会发生并发冲突,只在提交操作时检查是否违反数据完整性

  • 共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。

  • 排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。

共享锁和排他锁都是行锁,意向锁都是表锁,应用中我们只会使用到共享锁和排他锁,意向锁是mysql内部使用的,不需要用户干预。

  • 意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。

  • 意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。

好啦好啦,简单分享一些面试中用到的,下次来一波数据库优化~

拜拜

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值