mysql之tcl语言(事务控制语言)

事务

一个或者一组sql组成,在这个单元中,每个sql都是相互依赖的,要么全部成功,要么全部失败。

事务的ACID属性

  • 1.原子性
    原子性是指事务是一个不可分割的工作单位,事务中的操作要么发生,要么都不发生。
  • 2.一致性
    事务必须使数据库从一个一致性状态转变到另外一个一致性状态。
  • 3.隔离性
    事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 4.持久性
    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

事务的创建

隐式事务:事务没有明显的开启和结束的标记。

show variables like 'autocommit';

显式事务

-- 开始事务
set autocommit =0;
start transaction ;

-- 编写sql语句
-- 。。。。

-- 结束事务
commit ; -- 提交事务
rollback ;  -- 回滚事务

出现的问题

脏读:对于两个事务t1,t2,t1读取了已经被t2更新但是还没有被提交的字段之后,或t2回滚,t1读取的内容就是临时无效的。
不可重复度:对于两个事务t1,t2,t1读取了一个字段,然后t2更新了该字段,之后,t1再次读取这个字段,值就不同了。
幻读:对于两个事务t1,t2,t1读取了一个字段,然后t2在该表中插入了一些新的行,之后,如果t1再次读取同一个表,就会多出几行。

事务的隔离级别

read uncommited:脏读、幻读、不可重复读
read commited:不能脏读、幻读、不可重复读
repeatable read:不能脏读、不能幻读、不可重复读
serializable:不能脏读、不能幻读、不能不可重复读
mysql中的默认隔离级别为第三个:repeatable read
oracle中的默认隔离级别是:read commited
查看隔离级别:
select @@tx_isolcation
设置隔离级别:
set session|global transaction isolation level 隔离级别;

posted @ 2022-03-06 02:30  King-DA  阅读(47)  评论(0)    收藏  举报