娄底网站制作,做网站用什么比较好,重庆比较好的广告公司,网站调用字体事务 事务概念#xff1a; 事务是一组操作的集合#xff0c;它是一个不可分割的工作单位#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求#xff0c;即这些操作要么同时成功#xff0c;要么同时失败。 事务的特性#xff1a;ACID#xff1a; 小… 事务 事务概念 事务是一组操作的集合它是一个不可分割的工作单位事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求即这些操作要么同时成功要么同时失败。 事务的特性ACID 小结
ACID分别指的是原子性、一致性、隔离 性、持久性
举个例子
A向B转账500转账成功A扣除500元B增加500元原子操作体现在要么都成功要么都失败
在转账的过程中数据要一致A扣除了500B必须增加500
在转账的过程中隔离性体现在A像B转账不能受其他事务干扰
在转账的过程中持久性体现在事务提交后要把数据持久化可以说是落盘操作 并发事务问题 并发事务概念
并发事务是指在数据库系统中多个事务同时对数据进行读写和修改的过程。 并发事务问题 1.脏读 (违反了事务的隔离性)
例事务A先查询id为1的数据再修改id为1的数据。修改完以后事务A还没提交这时候事务B也来查询id为1的数据但这时候事务B已经可以读到A修改完的数据了。这就是脏读。如果A事务回滚但B已经读到了A修改的数据造成了数据不一致
2.不可重复读 (违反了事务的一致性)
例事务A先查询id为1的数据再执行某个逻辑。这时事务B修改id为1的数据。事务A再去查询id为1的数据却和之前不一样了简单来说就是在同一个事务内查询两次同一条数据却出现不同结果
3.幻读 (违反了事务的隔离性)在已经解决了不可重复读的基础上
例事务A查询id为1的数据发现数据库中没有。这个时候事务B来了正好往数据库中插入了一条id为1的数据并且提交了事务。这个时候事务A进行插入操作就直接报错了里面已经有了id为1的数据假设我们已经解决了不可重复读的问题。但A再次进行查询查询结果和第一次一样发现还是没有id为1的数据但插入就是报错这就是幻读的问题。
注意幻读是在解决了不可重复读的基础上不可重复读是读取了其他事务更改的数据针对update操作幻读是读取了其他事务新增的数据针对insert和delete操作。 解决方案 注这里✔表示存在该问题× 表示解决该问题。 小结
1.事务并发问题 第一是脏读 当一个事务正在访问数据并且对数据进行了修改而这种修改 还没有提交到数据库中这时另外一个事务也访问了这个数据因为这个数 据是还没有提交的数据那么另外一个事务读到的这个数据是“脏数据”依 据“脏数据”所做的操作可能是不正确的。 第二是不可重复读比如在一个事务内多次读同一数据。在这个事务还没有 结束时另一个事务也访问该数据。那么在第一个事务中的两次读数据之 间由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。 这就发生了在一个事务内两次读到的数据是不一样的情况因此称为不可重 复读。 第三是幻读Phantom read幻读与不可重复读类似。它发生在一个事务 T1读取了几行数据接着另一个并发事务T2插入了一些数据时。在 随后的查询中第一个事务T1就会发现多了一些原本不存在的记录就 好像发生了幻觉一样所以称为幻读。
2.事务隔离 第一个是未提交读read uncommitted它解决不了刚才提出的所有问 题一般项目中也不用这个。 第二个是读已提交read committed它能解 决脏读的问题的但是解决不了不可重复读和幻读。 第三个是可重复读 repeatable read它能解决脏读和不可重复读但是解决不了幻读这个 也是mysql默认的隔离级别。 第四个是串行化serializable它可以解决刚 才提出来的所有问题但是由于让是事务串行执行的性能比较低。所以 我们一般使用的都是mysql默认的隔离级别:可重复读。