MySql的初学习 -- 第六章 -- 了解事务

博客说明

文章内容输出来源:拉勾教育Java就业急训营

什么是事务

事务是一个整体,由一条或者多条SQL 语句组成,这些SQL语句要么都执行成功,要么都执行失败, 只要有 一条SQL出现异常,整个操作就会回滚,整个业务执行失败

重点:MySql默认打开自动事务!!

关于事务的例子

比如: 银行的转账业务,张三给李四转账500元, 至少要操作两次数据库, 张三 - 500, 李四 + 500,
这中间任何一步出现问题,整个操作就必须全部回滚, 这样才能保证用户和银行都没有损失.

事务例子

回滚

即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成 的操作全部撤销,滚回到事务开始时的状态。(在提交之前执行)

MySql事务操作

手动提交事务

功能语句
开启事务start transaction; 或者 BEGIN;
提交事务commit;
回滚事务rollback;

查看事务状态

在命令行中登录MySql后,查看autocommit状态

SHOW VARIABLES LIKE 'autocommit';
状态内容
ON自动提交(开启)
OFF手动提交(关闭)

查看事务状态

MySql事务的四大特性

特性含义
原子性每一个事务都是一个整体,不可拆分事务中所有的SQL要么都执行成功,要么都失败
一致性事务在执行前数据库的状态 与 执行后数据库状态保持一致,比如转账前两人总金额是2000,转账后总金额也是2000
隔离性事务与事务之间不应该相互影响,执行时要保持隔离状态
持久性一旦事务执行成功,对数据库的修改的持久的(永久),就算关机数据也是要保存下来

MySql事务隔离级别

了解隔离级别之前,要了解为什么需要隔离级别

为什么需要隔离级别(数据并发访问)

数据并发访问: 一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库. 数据库的相同数据可能
被多个事务同时访问
,如果不采取隔离措施,就会导致各种问题, 破坏数据的完整性

并发访问会产生的问题

事务在操作时的理想状态: 所有的事务之间保持隔离,互不影响。
因为并发操作,多个用户同时访问 同一个 数据。可能引发并发访问的问题

并发访问的问题说明
脏读一个事务读取到了另一个事务中尚未提交的数据
不可重复读一个事务中,两次读取的数据不一致
幻读一个事务中,一次查询的结果无法支撑后续的业务操作

MySql事务隔离级别

安全级别:1
read uncommitted:读未提交
可以防止的问题:不能解决任何并发访问会产生的问题

安全级别:2
read committed:读已提交(Oracle默认的隔离级别
可以防止的问题:脏读

安全级别:3
repeatable read:可重复读(MySql默认的隔离级别)
可以防止的问题:脏读、不可重复读

安全级别:4
serializable:串行化
可以防止的问题:脏读、不可重复读、幻读

注意:隔离级别从小到大,安全性越来越高,但是效率越来越低,需根据不同的情况选择对应的级别

隔离级别的相关命令

  1. 查看隔离级别:
 select @@tx_isolation;
  1. 设置隔离级别:
 -- 格式:set global transaction isolation level 级别名称;
 -- 级别名称:
 -- read uncommitted 读未提交
 -- read committed   读已提交 
 -- repeatable read  可重复读 
 -- serializable     串行化
 set global transaction isolation level repeatable read;

Sqlyog:
修改完隔离级别后,需要重新启动一个新链接或重新启动Sqlyog

MySql命令行(管理员身份运行):
修改完隔离级别后,需要重新打开命令行

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页