mysql事务(三)

  一、概述

    mysql 事务通常用来处理操作量大、复杂度高的数据;比如,我们在操作商品的时候,每个商品都是有分类的,如果我们将商品分类删除掉了,重新建了一个,但是之前分类下的商品还要在新建的分类下边,那边和其绑定的对应关系,就要在每个商品中去更新了,这时候操作量就会比较的大了,因此,事务更多的会用在数据的维护中;多用来管理 insert、update、delete 语句; 

    事务处理可以用来维护数据库的完整性,保证成批的 sql 语句要么全部执行生效,要么全部不生效;

    在 mysql 中只有使用了 InnoDB 数据库引擎的数据库或者表才支持事务;

  二、事务的性质

    一般事务通常必须满足四个条件(ACID): 原子性(A:atomicity,也叫作不可分割性)、一致性(C:consistency)、隔离性(I:isolation,也叫做独立性)、持久性(D:durability);

    原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,中间如果出错的话,就会被回滚(rallback)到最初的状态;

    一致性:在事务开始之前和结束之后,数据库的完整性没有也不会被破坏,也就是说在我们进行操作的时候,比如写入,我们必须按照之前数据库表等预定好的一些规则去执行,不能随便的去更改或者传递不符合规则的数据;

    隔离性:每个事务在处理的过程中都是独立的,假如有多个事务并发执行的话,每个事务之间是不会相互干扰的;事务隔离又分为四个不同的等级:未提交、读提交、可重复读。串行化。(在这里有一个问题,多个并发事务同时执行的话,假如存在修改和读写的话,先开始的事务是修改,那么在读的时候,假如读在修改之前,那么读出来的数据是修改前的还是修改后的,这个内部的操作机制是什么样的呢?)

    持久性:事务处理结束后,对数据的处理包括修改将会是永久性的,即使系统故障也不会丢失;

    (1)、事务的隔离性原理

      数据库事务会造成脏读、不可重读读以及幻影读等问题;其中,脏读是指事务还没提交,但是数据库的修改已经被其他的事务语句给读到了;不可重复读是指在同一个事务中,两个相同的 sql 读取的内容可能不同;幻影数据是指同一个事务可能突然读出一条其他事物临时写入的一条数据;

      事务的隔离是通过锁机制实现的,不同于MyIsam使用表级别的锁,InnoDB 采用更细进度的行级别锁;

猜你喜欢

转载自www.cnblogs.com/mufc/p/10562720.html