MySQL 事务你会了吗?

前言: 由于大一学习数据库不扎实,学到后面有点吃力,所以回过头来认真学习一边,写一些学习总结,提醒自己。也要告诫读者,把基础打扎实。读者觉得有用的话可以收藏点赞哦!

事务的ACID原则

A : 原子性: 要么都成功,要么都失败。

C : 一致性:一个事务执行会使数据从一个一致状态到另一个一致状态。

I :隔离性:一个事务的执行不会受到其他事务的干扰。

D :持久性: 事务一旦提交,则会永久的改变数据库的数据。

事务的创建

事务的创建分为两类:隐式事务,显式事务。

  • 隐式事务:事务没有明显的开启和结束的语句或标记。
    • 像我们常见的 DML 语言,insert、update、delete语句,这些语句执行就相当于开启了事务。
SHOW VARIABLES LIKE 'autocommit' 

结果:

Variable_nameValue
autocommitON

数据库默认开启了自动提交的功能。

  • 显式事务:事务有明显的开启和结束的语句或标记。
    • 前提: 必须先设置自动提交功能为禁用。
set autocommit=0;  # 关闭事务自动提交的功能

SHOW VARIABLES LIKE 'autocommit' # 查看

结果:

Variable_nameValue
autocommitOFF

注意点: 关闭自动提交功能只对当前会话有效,关闭数据库从新打开就失效了。

显式事务开启与结束

步骤1: 开启事务。

set autocommit=0; 
start transaction;   #(可选的)可以写也可以不写

步骤2: 编写事务中的sql语句。

语句一;

语句二;

语句三;

步骤3:结束事务。

commit;  #提交事务
rollback; # 回滚事务。

事务并发问题

对于同时运行多个事务,当这些事务访问数据库中相同的数据时,如果没有采用必要的隔离机制,就会导致各种并发问题。

脏读

对于两个事务 1 和 2 ,1 读取了已经被 2 更新但是没有提交的字段,若2 回滚以后,1 读取的内容就是临时的且无效的。

不可重复读

对于两个事务 1 和 2 ,1 读取了表中的一个字段,然后 2 更新了该字段之后,1 再次 读取同一个字段,值就不同了。

幻读

对于两个事务 1 和 2 ,1 读取了表中的一个字段,然后 2 在该表中插入了一些新数据之后,1 再次 读取同一个表,就会多出几行。

数据库的隔离级别

数据库系统必须具有隔离并发运行各个事务的能力,使它们不会相互影响, 避免各种并发问题.

一个事务与其他事务隔离的程度称为隔离级别.

数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越弱。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PWnq0jcP-1589083779656)(C:\Users\FTS36\AppData\Roaming\Typora\typora-user-images\image-20200510114836190.png)]

事务隔离级别脏读不可重复读幻读
read uncommitted
read commited×
repeatable read××
serializable×××
  • Oracle 支持的 2 种事务隔离级别:READ COMMITED,
    SERIALIZABLE。 Oracle 默认的事务隔离级别为: READ
    COMMITED

  • Mysql 支持 4 种事务隔离级别. Mysql 默认的事务隔离级别
    为: REPEATABLE READ

savepoint 的使用

只能搭配 rollback

示例:

set autocommit=0; 
start transaction;
DELETE FROM boys WHERE id=1;
savepoint a;  # 设置保存点
DELETE FROM boys WHERE id=2;
rollback to a; # 回滚到a, id=2 的信息没有删除,但是id=1 的已经删除

总结: 数据库这门语言呢,不难,但是要多练,没有捷径。读者觉得有用的话可以收藏点赞哦!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值