关于数据库相关知识

关于MySQL数据库事务知识

这篇文章是我学习数据库事务的笔记,这些基础知识学了很久了,但是总是有些模糊,借此学习笔记,来简单梳理一下数据库事务的一些基本常识。 <br> 关键词:ACID; TRANSACTION ISOLATION LEVEL;

什么是事务

事务(transaction)是数据库管理系统中一个重要的机制,如何理解事务的功能,就得通过事务的4大特性(ACID)理解:

  • Atomicity原子性 <br> 事务成功即有,失败回滚则无,在事务执行过程中所有语句要么全部执行,要么全部没有执行。不存在事务中的代码执行一半的情况。

  • Consistency一致性<br> 事务执行完成后,不会改变数据库原有规则。

  • Isolation隔离性<br> 事务彼此具有不同程度的隔离级别,隔离级别从低到高分别是Read Uncommitted;Read Committed; Repeatable Read; Serializable;

  • Durabilty持久性<br> 事务执行成功后,修改的数据是持久的,不会因为关闭数据库管理系统后就消失。

如何在MySQL中使用事务

首先,MySQL数据库引擎中,InnoDB支持事务(也支持行锁),所以需要将table中的数据库引擎设置为InnoDB;

// 修改引擎为InnoDB
alter table tableName type=InnoDB

// 查看表使用的数据库引擎
show create table tableName

之后,就可以使用

begin;

或者

start transaction;

来启动事务。

事务执行完成后,有两种选择,一是提交,二是回滚:

// 提交
submit;
// 回滚
rollback;

提交就是将事务中执行的所有代码都执行完成,回滚代表着这个事务不曾执行过。

脏读、不可重复读、幻读

事务的执行过程中会出现脏读、不可重复读和幻读。

  • Drity Read 脏读<br> 事务执行过程中读取另一个事务正在操作的字段,导致的可能结果就是第一个事务读取到第二个事务未提交的字段,而第二个事务RollBack后,第一个事务相当于读到一个假数据,这就是脏读。

  • Non-repeatable read 不可重复读<br> 第一个事务第一次读取某字段时,第二个事务提交了更新该字段的代码,导致第一个事务第二次读取某字段与第一次读取的数据不同,即不可重复读。

  • Phantom Read 幻读 第一个事务第一次读取了n行字段,第二个事务提交了insert语句,导致第一个事务第二次读取了n+1行字段,即幻读。

事务隔离级别

上文说到,事务隔离级别从低到高分别是Read Uncommitted;Read Committed; Repeatable Read; Serializable;

网上一篇关于事务隔离级别的文章中有以下这张图,很好诠释了不同事务隔离级别的功能。

事务隔离级别

值得注意的是可串行化会锁住执行的字段,所以千万记得加where条件语句。

关于锁的小知识

  • 对于update,insert,delete语句会自动加排它锁(相当于在执行语句后面加FOR UPDATE)

转载于:https://my.oschina.net/StupidZhe/blog/3016151

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值