事务(transation)的知识点

定义

·        一个最小的不可再分的工作单元

·        通常一个事务对应一个完整的业务

·        一个完整的业务需要批量的DML语句(Insert updatedelete..)语句共同完成

·        事务只和dml语句有关

·        需要多少dml语句与业务逻辑有关

举例

银行的转账业务,涉及两个账户的修改,所以要么都修改成功,要么都不修改

 

事务的四个特性(ACID)

原子性Atomicity

事务是最小的工作单元,不可再分

一致性Consistency

要求所有的dml语句必须同时成功或者同时失败

隔离性Isolation

两个事务之间具有隔离

持久性Durability

事务的保证,事务终结的标志(把内存的修改写到硬盘)

 

事务中的术语

开启事务

Start  transation

事务结束

End transation

提交事务

Commit transation

回滚事务

Rollback transation

 

与事务操作有关的重要sql

Commit    rollback

 

工作过程

事务在进行的过程中,dml语句并不会修改数据库中的数据,只是记录在了历史操作中,在内存中记录了下来,只有事务成功结束才会修改硬盘数据,失败则不做任何修改。

 

事务结束的标志

·        提交(commit) 成功结束并修改了数据库

·        回滚(rollback) 以失败告终,dml语句全部清空

 

事务开启的标志

任何一条dml语句的执行都标志着一个事务的开启

 

mysql中手动开启事务

由于mysql数据库中,默认情况下事务是自动提交的,所以需要开启手动提交

手动提交事务:

Start transation;(或set autocommit=off;)

Blablabla……..(dml)

Commit;

 

事务的四个隔离级别(隔离性)

       首先需要阐述什么是脏数据,什么是脏读,脏数据顾名思义是不好的数据,其概念出现在事务之中,是指一些毫无用处的数据,简言之是不该读到的数据,举个例子,两个事务ab,a事务在读出数据库数据并进行了更新,但是由于a事务出现某种异常,需要回滚,但是ba回滚之前读取了这个数据,那么b拿到的数据就是不准确的即被称为脏数据,这个行为就是脏读。

·        读未提交(read uncommited)(隔离性低)

         事务b还没有提交的数据,事务a就可以读到,此时由于事务a并未结束,可能会进行回滚操作,因此这里读到的就有可能是脏数据,一般数据库隔离都高于这个级别。

·        读已提交(read commited)(中)(oracle默认级别)

         事务b提交的数据事务a才能读到,避免了脏数据,但是会导致不可重复读,此处不可重复读理解为事务a读过数据之后,如果事务b更改了数据,事务a再去读,就会和之前读到的数据不同。

·        可重复读(repeatable read)(高)

         事务b提交事务a也读不到,事务a可重复读,此时数据库近乎隔离开来,事务a单独保留数据库数据,就算事务b对原始数据库进行了修改,a事务仍能读取保存的这个未被更改的数据库数据。

·        串行化(serializable)(很高)

         事务b操作数据库时,事务a只能排队,吞吐量太低,所以基本不用。

 

设置事务的隔离级别

·        修改my.ini配置文件,在mysqld下面添加

        transation-isolation = read-uncommited(事务隔离级别的英语)

·        通过命令

        Set   [无/session/global]  transation isolation level  read-uncommited

 

查看事务的隔离级别(当前会话)

    Select @@tx_isolation

    Select @@session.tx.isolation

查看全局的隔离级别

    Select  @@global.tx.isolation

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值