MySQL 事务、并发事务的隔离级别、回滚点savepoint的使用、delete和truncate在事务使用时的区别

一、含义

事务:一条或多条sql语句组成一个执行单位, 一组sql语句要么都执行要么都不执行

二、特点(ACID)

原子性(atomicity,或称不可分割性)、
一致性(consistency)、
隔离性(isolation,又称独立性)、
持久性(durability)。

A 原子性: 一个事务是不可再分割的整体,要么都执行要么都不执行
C 一致性:一个事务可以使数据从一个一致状态切换到另外一个一致的状态
I 隔离性:一个事务不受其他事务的干扰,多个事务互相隔离的
D 持久性: 一个事务一旦提交了,则永久的持久化到本地

三、事务的使用步骤

  1. 隐式(自动)事务:
    没有明显的开启和结束,本身就是一条事务可以自动提交,比如insert. update、delete

  2. 显式事务:具有明显的开启和结束

1. 使用显式事务:
  1. 开启事务
set autocommit=0;
start transaction;#可以省略
  1. 编写一组逻辑sql语句
    注意: sql语句支持的是insert、update、 delete
    设置回滚点:
    savepoint回滚点名;
  2. 结束事务
    提交: commit;
    回滚: rollback;

回滚到指定的地方: rollback to回滚点名;

1.演示事务的使用步骤

#开启事务
SET autocommit=0;
START TRANSACTION;
#编写一组事务的语句
DELETE FROM tab_id WHERE id=3;

#结束事务
COMMIT;#执行
#rollbakc;  回滚 

SELECT * FROM tab_id;

2. delete和truncate在事务使用时的区别

#演示delete
set autocommit=0;
START TRANSACTION;
DELETE FROM account;
ROLLBACK;
#支持回滚

#演示truncate
SET autocommit=0;
START TRANSACTION;
TRUNCATE TABLE account;
ROLLBACK;
不支持回滚

四、并发事务

  1. 事务的并发问题是如何发生的?
    多个事务同时操作同一个数据库的相同数据时
  2. 并发问题都有哪些?
  • 脏读:1个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据
  • 不可重复读:1个事务多次读取,结果不一样
  • 幻读:1个事务读取了其他事务还没有提交的数据,只是读到的是其他事务“插入”的数据
  1. 如何解决并发问题
    通过设置隔离级别来解决并发问题

  2. 隔离级别

							脏读		不可重复读	幻读
read unconnitted: 读未提交 	X		X			x
read comnitted: 读已提交		√		X			X
repeatable read:可重复读		√		√			X
serializable:串行化			√		√			√

x不能解决,√能解决
mysql中默认第三个隔离级别repeatable read
oracle中默认第二个隔离级别2

五、隔离级别命令

每启动一个mysql程序,就会获得一个单独的数据库连接.每
个数据库连接都有一个全局变量@@tx_ isolation, 表示当前的
事务隔离级别.

 - 查看当前的隔离级别:
 SELECT @@tx_isolation;
 - 设置当前mySQL连接的隔离级别:
set session transaction isolation level read committed;
 - 设置数据库系统的全局的隔离级别:
set session global transaction isolation level read committed;

回滚点savepoint的使用

SET autocommit = 0;
START TRANSACTION;
DELETE FROM tab_id WHERE id = 4;
SAVEPOINT a;#设置保存点
DELETE FROM tab_id WHERE id = 7;
ROLLBACK TO a;#回滚到保存点

SELECT * FROM tab_id;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值