数据库中的事务

什么是事务?

事务是指数据库中一系列数据库语句的集合,在mysql中,通常以start transaction;作为一个事务的语法开头,commit;作为事务的结尾,一则事务要么全部执行,要么全部不执行。我们可以将事务作为数据库中一个逻辑执行单元(不可分割)来理解。类似于操作系统的中将一条指令作为不可分割的单位。事务的出现主要被用来解决数据库在并发场景下存在的数据不一致性问题。

事务的性质

ACID:

  • Atomic:(原子性):不可分割的特性
  • Concurrent(一致性):状态转移的一致性
  • Isolation(独立性):不同事务之间的状态是独立的
  • Duration(持久性):事务执行完成后,状态会被永久保持在磁盘中(如果是mysql数据库)

事务之间的隔离等级

脏读不可重复读幻读
read uncommitted
read committed
repeatable read
serializable

在mysql中,我们通常使用select @@ioslation_transaction;来查询当前数据库的隔离级别。mysql默认使用repeatable read作为默认属性。
使用语句set [session|global] transaction isolation level {上述四种中的一种};来设置隔离级别。
当隔离级别为read uncommitted, 两个客户端并发执行事务,客户端A先查询两次,客户端B在客户端A查询两次中间更新了数据库,则会导致客户端A两次查询结果不一致,这称之为脏读
当隔离级别为read committed,两个客户端并发执行事务,客户端A查询两次,客户端B在客户端A查询两次中间更新了数据库,如果没有执行committed;语句,客户端A两次查询结果一致,若执行了committed;语句,则客户端A两次查询结果可能不一致,这称之为不可重复读
当隔离级别为repeatable read,两个客户端并发执行事务,客户端A查询两次,客户端B在客户端A查询两次中间更新了数据库插入某一个主键I,客户端A两次查询结果一致,若执行了committed;语句,客户端A如果插入I,会失败,这称之为幻读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值