mysql怎么识别事务 mysql查看事物

mysql 查当前有哪些分布式事务1.普通事务
以 begin / start transaction 开始,commit / rollback 结束的事务 。或者是带有保存点 savepoint 的事务 。
2. 链式事务
一个事务在提交的时候自动将上下文传给下一个事务,也就是说一个事务的提交和下一个事务的开始是原子性的,下一个事务可以看到上一个事务的处理结果 。MySQL 的链式事务靠参数 completion_type 控制 , 并且回滚和提交的语句后面加上 work 关键词 。
3. 嵌套事务
有多个 begin / commit / rollback 这样的事务块的事务,并且有父子关系 。子事务的提交完成后不会真的提交,而是等到父事务提交才真正的提交 。
4. 自治事务
内部事务的提交不随外部事务的影响,一般用作记录内部事务的异常情况 。MySQL 不支持自治事务 , 但是某些场景可以用 MySQL 的插件式引擎来变相实现 。
mysql的事务四个特性以及事务的四个隔离级别分别是原子性、一致性、隔离性、持久性 。
原子性是指事务包含的所有操作要么全部成功 , 要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响 。
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态 。举例来说,假设用户A和用户B两者的钱加起来一共是1000,那么不管A和B之间如何转账、转几次账,事务结束后两个用户的钱相加起来应该还得是1000,这就是事务的一致性 。
隔离性是当多个用户并发访问数据库时 , 比如同时操作同一张表时,数据库为每一个用户开启的事务 , 不能被其他事务的操作所干扰,多个并发事务之间要相互隔离 。关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到 。
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作 。例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后 , 就可以认定事务已经正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成 。否则的话就会造成我们虽然看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误 。这是不允许的 。
在数据库操作中,在并发的情况下可能出现如下问题:
正是为了解决以上情况,数据库提供了几种隔离级别 。
数据库事务的隔离级别有4个,由低到高依次为Read uncommitted(未授权读取、读未提交)、Read committed(授权读取、读提交)、Repeatable read(可重复读?。erializable(序列化),这四个级别可以逐个解决脏读、不可重复读、幻象读这几类问题 。
虽然数据库的隔离级别可以解决大多数问题 , 但是灵活度较差,为此又提出了悲观锁和乐观锁的概念 。
悲观锁,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度 。因此 , 在整个数据处理过程中,将数据处于锁定状态 。悲观锁的实现,往往依靠数据库提供的锁机制 。也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统的数据访问层中实现了加锁机制 , 也无法保证外部系统不会修改数据 。
商品t_items表中有一个字段status,status为1代表商品未被下单,status为2代表商品已经被下单(此时该商品无法再次下单),那么我们对某个商品下单时必须确保该商品status为1 。假设商品的id为1 。

推荐阅读