《Java 面试指北》来啦!这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ......)、优质面经等内容。
本文原发于 MySQL知识点&面试题总结 。
你好,我是 Guide。分享一道群友面试虾皮遇到的 MySQL 事务相关的面试真题。
这篇文章我除了会对群友面试遇到的面试真题进行了解答,还会顺带总结一下 MySQL 事务部分其他比较常见的问题,希望对你有帮助。
下面是最近更新的一些面试真题:
- 招银网络一面:Spring,Spring MVC,Spring Boot 之间什么关系?
- 招银网络一面:@Autowired 和 @Resource 的区别是什么?
- 招银网络二面:什么是序列化?常见的序列化协议有哪些?
- 某大厂面试:什么是字节码?为什么说 Java 语言“编译与解释并存”?
- 某小厂面试题:深拷贝和浅拷贝区别了解吗?什么是引用拷贝?
- 阿里云二面:String 为什么不可变?
- 阿里云二面:简单聊聊 Java 虚拟机栈!
- 金蝶一面:基本数据类型有哪些?包装类型的常量池技术了解么?
- 虾皮二面:Spring Bean 默认是单例的,如何保证并发安全?
- 虾皮二面:MySQL 支持哪些存储引擎?MyISAM 和 InnoDB 的区别是什么?
- 招银网络二面:Exception 和 Error 有什么区别?
- 虾皮二面:如何设计优惠券系统?
何谓事务?
我们设想一个场景,这个场景中我们需要插入多条相关联的数据到数据库,不幸的是,这个过程可能会遇到下面这些问题:
- 数据库中途突然因为某些原因挂掉了。
- 客户端突然因为网络原因连接不上数据库了。
- 并发访问数据库时,多个线程同时写入数据库,覆盖了彼此的更改。
- ......
上面的任何一个问题都可能会导致数据的不一致性。为了保证数据的一致性,系统必须能够处理这些问题。事务就是我们抽象出来简化这些问题的首选机制。事务的概念起源于数据库,目前,已经成为一个比较广泛的概念。
何为事务? 一言蔽之,事务是逻辑上的一组操作,要么都执行,要么都不执行。
事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账 1000 元,这个转账会涉及到两个关键操作,这两个操作必须都成功或者都失败。
- 将小明的余额减少 1000 元
- 将小红的余额增加 1000 元。
事务会把这两个操作就可以看成逻辑上的一个整体,这个整体包含的操作要么都成功,要么都要失败。这样就不会出现小明余额减少而小红的余额却并没有增加的情况。
何谓数据库事务?
大多数情况下,我们在谈论事务的时候,如果没有特指分布式事务,往往指的就是数据库事务。
数据库事务在我们日常开发中接触的最多了。如果你的项目属于单体架构的话,你接触到的往往就是数据库事务了。
那数据库事务有什么作用呢?
简单来说,数据库事务可以保证多个对数据库的操作(也就是 SQL 语句)构成一个逻辑上的整体。构成这个逻辑上的整体的这些数据库操作遵循:要么全部执行成功,要么全部不执行 。
# 开启一个事务
START TRANSACTION;
# 多条 SQL 语句
SQL1,SQL2...
## 提交事务
COMMIT;
另外,关系型数据库(例如:MySQL
、SQL Server
、Oracle
等)事务都有 ACID 特性:
- 原子性(
Atomicity
) : 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; - 一致性(
Consistency
): 执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的; - 隔离性(
Isolation
): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的; - 持久性(
Durabilily
): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
文章来源: 博客园
- 还没有人评论,欢迎说说您的想法!