数据库事务

什么是事务?

事务就是被绑定在一起作为一个逻辑工作单元的SQL语句组,如果任何一个语句操作失败那么整个操作就被失败,进而回滚到操作前状态,或者是上个节点。为了确保要么执行,要么不执行,就可以使用事务。要将一组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

事务的基本定义

事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。

事务的属性

谈到事务一般都是以下四点属性:

原子性(Atomicity)
  原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

一致性(Consistency)
  事务前后数据的完整性必须保持一致。

隔离性(Isolation)
  事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

持久性(Durability)
  持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

事务的隔离级别

事务的隔离是为了解决多事务执行过程中产生的脏读、不可重复读、幻读等问题。

事务从低到高的四种隔离级别(其中隔离级别越严格,安全性越高,但数据库的并发性能也就越低):

Read Uncommitted(读未提交)
  一个事务可以读取另一个未提交事务(有修改操作)的数据。会出现脏读。

Read committed(读已提交)[比较常见]
  一个事务要等另一个事务(有修改操作)提交后才能读取数据。若有事务对数据进行更新(UPDATE)操作时,读操作事务要等待这个更新操作事务提交后才能读取数据,可以解决脏读问题。

但是会出现不可重复读问题:一个事务范围内两个相同的查询(查询间隔中另一个事务对查询的内容进行了修改)却返回了不同数据,这就是不可重复读。

Repeatable read(可重复读)
  在开始读取数据(事务开启)时,不再允许修改操作。可避免脏读、不可重复读情况发生。

不可重复读问题对应的是修改,即UPDATE操作。但是可能还会有幻读问题。因为幻读问题对应的是插入INSERT操作,而不是UPDATE操作。

Serializable(串行化)[比较少见]
  Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

事物的控制

1、开启事物

语法:start transaction |begin 开启一个新的事物

1、创建一个库test5

2、创建一张表account(id 主键唯一自增)

3、插入数据

例如:开启事物,完成张三给李四转账200

Start transaction

Update account set balance = balance-200 where username=”张三”

Update account set balance = balance+200 where username=”李四”

注意:使用start transaction 开启一个新事物后,该事物不会自动提交,必须手动提交

2、提交事物

语法:commit

例如:开启事物,完成张三给李四转账200,提交事物

Start transaction

Update account set balance = balance-200 where username=”张三”

Update account set balance = balance+200 where username=”李四”

Commit;

3、回滚事物

语法:rollback;

注意:开启的事物未提交的时候可以回滚

例如:回滚事物(回到没有执行的状态)

Start transaction

Update account set balance = balance-200 where username=”张三”

Update account set balance = balance+200 where username=”李四”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值