java面试题超详细整理《MySQL篇》二

本文深入解析数据库的第一、二、三范式原理,以及事务的概念、特性及其ACID保证机制,涵盖事务隔离和持久性的实现技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库三大范式
第一范式: 属性不可再分
第二范式: 在一范式的基础上,消除了部份依赖,属性完全依赖于主键
第三范式: 在二范式的基础上,消除了传递依赖,属性不依赖于其它非主属性 属性直接依赖于主键
数据库中的事务是什么?事务的特性?
事务( transaction) 是一组有序的数据库操作。如果组中的所有操作都成功, 则认为事务成功,提交事务。 如果一个操作失败, 则事务将回滚, 该事务所有操作的影响都将取消。(事务是逻辑上的一组操作,要么都执行,要么都不执行)

事务的特性:ACID

原子性(Atomicity) : 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
一致性(Consistency): 执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的;
隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
# 开启一个事务
START TRANSACTION;
# 多条 SQL 语句
SQL1,SQL2...
## 提交事务
COMMIT;
1
2
3
4
5
6
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记录)


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值