MySQL之TCL(事务)

目录

一、概述

1.1 什么是事务?

1.2 数据库引擎

1.3 事务的特性

二、事务创建

2.1 创建步骤

2.2 事务分类

三、事务的隔离级别

3.1 并发问题

3.1.1 如何产生?

3.2.2 并发问题分类

3.2 解决并发问题

3.3 隔离级别设置

3.3.1 ERROR 1193 (HY000): Unknown system variable 'tx_isolation' 


一、概述

1.1 什么是事务?

        事务:一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。

1.2 数据库引擎

        概念:在mysql中的数据用各种不同的技术存储在文件(或内存)中。

        操作:

                 查看mysql支持的存储引擎

                                show engines;

        常用的数据库引擎:MyISAM、InnoDB、MEMORY。

        面试题:MyISAM 与 InnoDB 区别?

对比项

MyISAMInnoDB
主外键不支持支持
事务不支持支持
行表锁表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作

行锁,操作时只锁住一行,不对其它行有影响 

适合高并发操作

缓存只缓存索引,不缓存真实数据不仅缓存索引还要缓存真实数据,对内存要求极高,而且内存大小对性能有决定性影响
表空间
关注点性能事务
默认安装YY

1.3 事务的特性

        事务的ACID特性:

                原子性(Atomicity):是不可分割的最小操作单位,要么同时成功,要么同时失败。

                一致性(Consistency):保证数据的状态操作前和操作后保持一致。

                隔离性(Isolation):多个事务同时操作相同数据库的同一个数据时,一个事务的执行不受另外一个事务的干扰。

                持久性(Durability):当事务提交或回滚后,数据库会持久化的保存数据。

二、事务创建

2.1 创建步骤

        1. 开启事务

        2. 编写事务逻辑操作单元

        3. 提交事务或回滚事务

#取消自动提交事务
SET autocommit = 0; 
#开启事务
START TRANSACTION; 
语句1;
语句2;
...
语句n;
#提交或回滚事务
COMMIT;
ROLLBACK;

        回滚:回到数据操作之前的状态。

2.2 事务分类

        隐式事务:没有明显的开启和结束事务的标志。

        显式事务:具有明显的开启和结束事务的标志。

三、事务的隔离级别

3.1 并发问题

3.1.1 如何产生?

        当多个事务同时操作同一个数据库的相同数据时。

3.2.2 并发问题分类

  • 脏读:一个事务读取到了另外一个事务未提交的数据。
  • 不可重复读:同一个事务中,多次读取到的数据不一致。
  • 幻读:一个事务读取数据时,另外一个事务进行更新,导致第一个事务读取到了没有更新的数据。

3.2 解决并发问题

        设置隔离级别。 

        事务隔离级别:

                        √即代表会出现的情况。

脏读不可重复读幻读
READ UNCOMMITTED
READ COMMITTED×
REPEATABLE READ(MySQL默认隔离级别)××
SERIALIZABLE×××

                注:隔离级别从小到大安全性越来越高,但是效率越来越低。

3.3 隔离级别设置

#设置隔离级别
SET SESSION|GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别名;

#查看隔离级别
SELECT @@tx_isolaction;

3.3.1 ERROR 1193 (HY000): Unknown system variable 'tx_isolation' 

        在这里需要注意一个点:在查看隔离级别的时候可能会报一个错:

                ERROR 1193 (HY000): Unknown system variable 'tx_isolation'

        不要着急,我们先翻译一下错误,这段英文的意思是未知系统变量,就是说MYSQL中没有这个变量,这是为什么呢?

        这是因为由于MySQL数据库的更新,在旧版本中tx_isolation是作为transaction_isolation的别名被应用的,新版本已经被弃用了,所以会显示未知系统变量。

        那怎么解决呢?

        把tx_isolation换成transaction_isolation就可以了!

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值