霸州放心的网络建站,网站的搜索引擎,在线p图网页版免费,网站建设公司管理流程一、事务
1.事务的定义 事务是一组操作的集合#xff0c;它是一个不可分割的工作单位#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求#xff0c;即这些操作要么同时成功#xff0c;要么同时失败。
2.事务的特性 ACID的解释如下#xff1a; 1. …一、事务
1.事务的定义 事务是一组操作的集合它是一个不可分割的工作单位事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求即这些操作要么同时成功要么同时失败。
2.事务的特性 ACID的解释如下 1. 原子性Atomicity事务是不可分割的最小操作单元要么全部成功要么全部失败。 2. 一致性Consistency事务完成时必须使所有的数据都保持一致状态。 3. 隔离性Isolation数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行。 4. 持久性Durability事务一旦提交或回滚它对数据库中的数据的改变就是永久的。
二、事务的并发、隔离级别
1.事务的并发问题 解决并发问题的方法就是使用隔离级别。
2.隔离级别 注意事务隔离级别越高数据越安全但是性能越低。
三、面试的回答
1.事务的特性
面试官事务的特性是什么可以详细说一下吗
候选人嗯这个比较清楚ACID分别指的是原子性、一致性、隔离性、持久性我举个例子
A向B转账500转账成功A扣除500元B增加500元原子操作体现在要么都成功要么都失败
在转账的过程中数据要一致A扣除了500B必须增加500。
在转账的过程中隔离性体现在A像B转账不能受其他事务干扰。
在转账的过程中持久性体现在事务提交后要把数据持久化可以说是落盘操作。
2.事务并发问题及解决
面试官并发事务带来哪些问题
候选人我们在项目开发中多个事务并发进行是经常发生的并发也是必然的有可能导致一些问题。
第一是脏读 当一个事务正在访问数据并且对数据进行了修改而这种修改还没有提交到数据库中这时另外一个事务也访问了这个数据因为这个数据是还没有提交的数据那么另外一个事务读到的这个数据是“脏数据”依据“脏数据”所做的操作可能是不正确的。
第二是不可重复读比如在一个事务内多次读同一数据。在这个事务还没有结束时另一个事务也访问该数据。那么在第一个事务中的两次读数据之间由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。这就发生了在一个事务内两次读到的数据是不一样的情况因此称为不可重复读。
第三是幻读Phantom read幻读与不可重复读类似。它发生在一个事务T1读取了几行数据接着另一个并发事务T2插入了一些数据时。在随后的查询中第一个事务T1就会发现多了一些原本不存在的记录就好像发生了幻觉一样所以称为幻读。
面试官怎么解决这些问题呢MySQL的默认隔离级别是
候选人解决方案是对事务进行隔离MySQL支持四种隔离级别分别有
第一个是未提交读read uncommitted它解决不了刚才提出的所有问题一般项目中也不用这个。
第二个是读已提交read committed它能解决脏读的问题的但是解决不了不可重复读和幻读。
第三个是可重复读repeatable read它能解决脏读和不可重复读但是解决不了幻读这个也是mysql默认的隔离级别。
第四个是串行化serializable它可以解决刚才提出来的所有问题但是由于让是事务串行执行的性能比较低。所以我们一般使用的都是mysql默认的隔离级别:可重复读。