MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别

目录

简介

事务操作

查看/设置事务提交方式 

开启事务 

提交事务 

回滚事务

四大特性ACID

原子性(Atomicity)

一致性(Consistency)

隔离性(Isolation)

持久性(Durability)

并发事务问题

脏读

不可重复读

幻读

事务隔离级别

小结


多表查询的内容已经告一段落了,接下来要学习的是新的一个内容——事务,将分为几个点进行学习:

  • 简介
  • 事务操作
  • 事务的四大特性ACID
  • 并发事务问题
  • 隔离级别
  • 小结

下面就先对事务进行一个简单大体的了解:

简介

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

 比如下面的三个操作(张三给李四转账1000块钱):

1.查询张三账户余额;

2.张三账户余额-1000;

3.李四账户余额+1000。

在一般情况下,

我们执行了操作1和2,若在2到3的过程中抛了异常,那么这时李四的余额就没有完成+1000的操作;但张三的账户余额仍减了1000,这就让张三白白丢了1000块钱了,显然不合理。

所以需要用事务来操作,将这些操作集并起来,

开启事务之后,执行操作1和2,当2到3的过程中抛了异常,这时就会回滚事务,重新回到操作1;

直到完成所有操作,才会提交事务。

默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。

事务操作

查看/设置事务提交方式 

SELECT @@autocommit;   -- 查看事务提交方式

SET @@autocommit = 0;   -- 设置事务提交方式
-- 0代表手动提交事务,1代表自动提交事务

当我们将事务提交方式改为手动提交之后,每执行一次SQL语句都需要COMMIT;来提交事务,否则只是临时修改了数据,而并没有将数据提交到数据库中去。

开启事务 

START TRANSACTION 或 BEGIN;

开启事物之后,才会使得执行的语句变成手动提交;不同于上面的全局设置。

提交事务 

COMMIT;

当所有操作都无误之后,我们就可以提交事物,将数据提交到数据库中。 

回滚事务

ROLLBACK;

当操作出现异常时,需要将操作撤销,重新开始操作,称为回滚事务。

四大特性ACID

这里的四大特性涉及到面试题

原子性(Atomicity)

  • 事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

当一个事务在执行时,它会将一组SQL语句放在同一批次内去执行。如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。

一致性(Consistency)

  • 事务完成时,必须使所有的数据保持一致状态。

例如,银行转账可以分解为两个动作:从A账户中扣除资金额X,然后将资金额X加到B账户中。如果在这个过程中发生了错误,那么整个操作都应该被回滚到初始状态。保证A和B加起来的账户余额要和初始状态一致。

隔离性(Isolation)

  • 数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

例如,一个事务正在修改某个数据项,此时另一个事务也想要修改这个数据项,但是由于隔离性的存在,第二个事务会等待第一个事务完成修改后再进行修改 。

持久性(Durability)

  • 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

事务一旦提交,它对数据库的改变就应该是永久性的(将数据提交保存在了硬盘中),接下来的其他操作或故障不应该对本次事务的修改有任何影响 。

并发事务问题

脏读

一个事务读到另外一个事务还没有提交的数据。

不可重复读

一个事务先后读到同一条记录,但两次读取的数据不同,称之为不可重复读。

幻读

一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。

要解决事务并发问题,就需要根据不同的并发问题来设置不同的隔离级别了

事务隔离级别

隔离级别 脏读 不可重复读 幻读
Read uncommitted(Oracle默认) 会出现 会出现 会出现
Read committed 不会出现 会出现 会出现
Repeatable Read(MySQL默认) 不会出现 不会出现 会出现
Serializable 不会出现 不会出现 不会出现

查看事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

设置事务隔离级别

SET [SESSION GLOBAL /* 设置当前窗口的事务隔离级别 */ ] 
TRANSATION ISOLATION LEVEL [READ UNCOMMITTED | ......];

注:事务隔离级别越高,数据越安全,但是性能越低。

所以需要权衡事务并发问题与性能之间的天平,选择合适的隔离级别。

小结

1.事务简介

事务是一组操作的集合,这组操作,要么全部执行成功,要么全部执行失败。

2.事务操作 

START TRANSACTION; -- 开启事务
COMMIT / ROLLBACK; -- 提交/回滚事务

3.事务四大特性

原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

4.并发事务问题

脏读、不可重复读、幻读 

5.事务隔离级别 

READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE

END 


学习自:黑马程序员——MySQL数据课程

你可能感兴趣的:(数据库,数据库,mysql,学习,笔记,sql)