当前位置:   article > 正文

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

事务中使用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
  • 2
  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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

四、并发事务

  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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

五、隔离级别命令

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

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

回滚点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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/992176
推荐阅读
相关标签
  

闽ICP备14008679号