java面试题超详细整理
作者:互联网
数据库三大范式
第一范式: 属性不可再分
第二范式: 在一范式的基础上,消除了部份依赖,属性完全依赖于主键
第三范式: 在二范式的基础上,消除了传递依赖,属性不依赖于其它非主属性 属性直接依赖于主键
数据库中的事务是什么?事务的特性?
事务( transaction) 是一组有序的数据库操作。如果组中的所有操作都成功, 则认为事务成功,提交事务。 如果一个操作失败, 则事务将回滚, 该事务所有操作的影响都将取消。(事务是逻辑上的一组操作,要么都执行,要么都不执行)
事务的特性:ACID
原子性(Atomicity) : 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
一致性(Consistency): 执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的;
隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
# 开启一个事务
START TRANSACTION;
# 多条 SQL 语句
SQL1,SQL2...
## 提交事务
ACID靠什么来保证?
原子性:MySQL InnoDB 引擎使用 undo log(回滚日志) 来保证事务的原子性,记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql
一致性:保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障。
隔离性:MySQL InnoDB 引擎通过锁机制、MVCC 等手段来保证事务的隔离性( 默认支持的隔离级别是 REPEATABLE-READ )。
持久性:使用 redo log(重做日志) 保证事务的持久性,mysql修改数据的同时在内存和redo log记录这次操作,宕机的时候可以redo log恢复。redo log的刷盘会在系统空闲时进行。
InnoDB redo log写盘,InnoDB事务进入prepare状态。如果前面的prepare成功,binlog写盘,在继续将事务日志持久化到binlog中,如果持久化成功,那么InnoDB事务则进入commit状态(在redo log里面写一个commit记录)
Java入门推荐:https://www.bilibili.com/video/BV1qL411u7eE?spm_id_from=333.337.search-card.all.click
第一范式: 属性不可再分
第二范式: 在一范式的基础上,消除了部份依赖,属性完全依赖于主键
第三范式: 在二范式的基础上,消除了传递依赖,属性不依赖于其它非主属性 属性直接依赖于主键
数据库中的事务是什么?事务的特性?
事务( transaction) 是一组有序的数据库操作。如果组中的所有操作都成功, 则认为事务成功,提交事务。 如果一个操作失败, 则事务将回滚, 该事务所有操作的影响都将取消。(事务是逻辑上的一组操作,要么都执行,要么都不执行)
事务的特性:ACID
原子性(Atomicity) : 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
一致性(Consistency): 执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的;
隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
# 开启一个事务
START TRANSACTION;
# 多条 SQL 语句
SQL1,SQL2...
## 提交事务
ACID靠什么来保证?
原子性:MySQL InnoDB 引擎使用 undo log(回滚日志) 来保证事务的原子性,记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql
一致性:保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障。
隔离性:MySQL InnoDB 引擎通过锁机制、MVCC 等手段来保证事务的隔离性( 默认支持的隔离级别是 REPEATABLE-READ )。
持久性:使用 redo log(重做日志) 保证事务的持久性,mysql修改数据的同时在内存和redo log记录这次操作,宕机的时候可以redo log恢复。redo log的刷盘会在系统空闲时进行。
InnoDB redo log写盘,InnoDB事务进入prepare状态。如果前面的prepare成功,binlog写盘,在继续将事务日志持久化到binlog中,如果持久化成功,那么InnoDB事务则进入commit状态(在redo log里面写一个commit记录)
Java入门推荐:https://www.bilibili.com/video/BV1qL411u7eE?spm_id_from=333.337.search-card.all.click
搜索
复制
标签:面试题,java,log,数据库,事务,InnoDB,详细,范式,redo 来源: https://www.cnblogs.com/aibianchengdexiaojiejie/p/16305987.html