TCL事务控制语言
2020 年 10 月 10 日 213 478 字 暂无评论

01.含义

  • 事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行。

02.特点(ACID)

  • 原子性:一个事务是不可再分割的整体,要么都执行要么都不执行。
  • 一致性:一个事务可以使数据从一个一致状态切换到另外一个一致的状态。
  • 隔离性:一个事务不受其他事务的干扰,多个事务互相隔离的。
  • 持久性:一个事务一旦提交了,则永久的持久化到本地。

03.事务的使用步骤

  • 隐式(自动)事务:没有明显的开启和结束,本身就是一条事务可以自动提交,比如insert、update、delete。
  • 显式事务:具有明显的开启和结束。

使用显式事务:

  • 开启事务
 set autocommit=0;  start  transaction;#可以省略  
  • 编写一组逻辑sql语句

    • 注意:sql语句支持的是insert、update、delete
  • 设置回滚点
 savepoint 回滚点名;  
  • 结束事务
  提交:commit; 
  回滚:rollback;  
  回滚到指定的地方:rollback to  回滚点名; 

04.并发事务

  • 事务的并发问题是如何发生的?

    • 多个事务 同时 操作 同一个数据库的相同数据时。
  • 并发问题都有哪些?

    • 脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据。
    • 不可重复读:一个事务多次读取,结果不一样。
    • 幻读:一个事务读取了其他事务还没有提交的数据,只是读到的是 其他事务“插入”的数据。
  • 如何解决并发问题

    • 通过设置隔离级别来解决并发问题
  • 隔离级别(可解决问题√ )
​                                 脏读        不可重复读        幻读

read uncommitted:读未提交         ×             ×               ×    

read committed:读已提交          √             ×               ×

repeatable read:可重复读         √             √               ×

serializable:串行化              √             √               √                                                     
  • mysql 中默认 第三个隔离级别 repeatable read
  • oracle中默认第二个隔离级别 read committed
  • 查看隔离级别
select  @@transaction_isolation;  
  • 设置隔离级别
set session|global  transaction isolation level 隔离级别;  

版权属于:zfh

本文链接:http://zfhblog.com/index.php/archives/160/



评论已关闭