1.事务的使用场景

mysql事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人愿,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务。

  • 在mysql中只有使用了Innodb数据库引擎的数据库或表,才能支持事务。
  • 事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行。
  • 事务用来管理insert update delete语句。

    在mysql命令行的默认设置下,事物都是自动提交的,即执行sql语句后就会马上执行commit操作。因此要显式的开启一个事务,必须使用命令begin或start或start transaction,或者执行命令set autocommit=0,用来禁止使用当前会话的自动提交。

2. 事务控制语句:

  • begin或start transaction:显式的开启一个事务
  • commit:提交事务,并使已对数据库进行的所有修改成为永久性的。等价于commit work
  • rollback:回滚会结束用户的事务,并撤销正在进行的所有未提交的修改,等同于rollback work
  • savepoint identifier:savepoint允许在事务中创建一个保存点,一个事务中可以有多个savepoint
  • release savepoint identifier:删除一个事务的保存点,当没有指定的保存点,执行该语句会抛出一个异常。
  • rollback to identifier:把事务会滚到标记点
  • set transaction:用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有read uncommitted、read committed、repeatable read和serializable

3.事务处理主要有2种方法

3.1.begin、rollback、commit来实现

  • begin:开始一个事务
  • rollback:事务会滚
  • commit:事务确认

3.2.直接用set来改变mysql的自动提交模式

  • set autocommit=0 当前session禁用自动提交事物,自此句执行以后,每个SQL语句或者语句块所在的事务都需要显示"commit"才能提交事务。
  • set autocommit=1 开启自动提交

4.事务处理中查看数据

事务处理中,需要排除session的干扰,每次执行后,通过终端在mysql下查看数据,不要在客户端查看。

docker exec -it csjmysql sh
mysql -u root -p
select * from csj_transaction_test;

5.数据确认提交因素autocommit

5.1.场景1:创建一个innodb类型的表,禁止自动提交。插入数据。

结果:数据没有提交

drop table if exists csj_transaction_test;
create table csj_transaction_test (id int(5),name varchar(20)) engine=innodb;
set autocommit=0;
insert into csj_transaction_test VALUES (1,"tom");
-- 使用终端查看
select * from csj_transaction_test;

第二步:在场景1的基础上,使用事务管理继续执行

结果:第一步的数据提交成功,第二步的数据没有提交

begin;
-- 执行begin,先对之前的操作commit,再开始下一个事务。如果没有begin,执行的操作依然不会被提交。
insert into csj_transaction_test values(2,"jerry");
-- 使用终端查看
select * from csj_transaction_test;

5.2.场景2:创建一个innodb类型的表,允许自动提交,插入数据。

结果:数据自动提交

drop table if exists csj_transaction_test;
create table csj_transaction_test (id int(5),name varchar(20)) engine=innodb;
set autocommit=1;
insert into csj_transaction_test values(2,"jerry");
-- 使用终端查看
select * from csj_transaction_test;

第二步:在场景2的基础上,执行事务管理

结果:第二部的数据没有提交

begin;
insert into csj_transaction_test values (2,"jerry");
-- 使用终端查看。
-- 如果用事务,需要commit;否则,不会执行
select * from csj_transaction_test;

5.3.场景3:创建一个普通表,禁止自动提交。插入数据

结果:数据没有提交

drop table if exists csj_transaction_test;
create table csj_transaction_test (id int(5),name varchar(20))
set autocommit=0;
insert into csj_transaction_test VALUES (1,"tom");
-- 使用终端查看
select * from csj_transaction_test;

5.4.场景4:创建一个普通表,允许自动提交。插入数据

结果:数据自动提交

drop table if exists csj_transaction_test;
create table csj_transaction_test (id int(5),name varchar(20));
set autocommit=1;
insert into csj_transaction_test values(2,"jerry");
-- 使用终端查看
select * from csj_transaction_test;

结论:

  • 1.innodb只是一种数据库引擎,提供了事务的隔离级别,不会改变数据库的自动提交属性。是否提交当前和autocommit的值有关。
  • 2.如果使用事务管理。begin会对先前的操作进行提交;begin之后的操作需要commit才能提交。

6.事务示例

示例1:基于3.1

drop table if exists csj_transaction_test;
create table csj_transaction_test (id int(5),name varchar(20)) engine=innodb;
begin;
insert into csj_transaction_test VALUES (1,"tom");
insert into csj_transaction_test values(2,"jerry");
commit;
-- 使用终端查看
select * from csj_transaction_test;

示例2:基于3.1

drop table if exists csj_transaction_test;
create table csj_transaction_test (id int(5),name varchar(20)) engine=innodb;
begin;
insert into csj_transaction_test VALUES (1,"tom");
insert into csj_transaction_test values(2,"jerry");
rollback;
-- 使用终端查看
select * from csj_transaction_test;


示例3:基于3.2
```#sql
drop table if exists csj_transaction_test;
create table csj_transaction_test (id int(5),name varchar(20)) engine=innodb;
set autocommit=0;
insert into csj_transaction_test VALUES (1,"tom");
insert into csj_transaction_test values(2,"jerry");
commit;
-- 使用终端查看
select * from csj_transaction_test;
```

菜鸟教程 mysql事务

mysql-7事务管理的更多相关文章

  1. mysql之事务管理

    本文内容: 什么是事务管理 事务管理操作 回滚点 默认的事务管理 首发日期:2018-04-18 什么是事务管理: 可以把一系列要执行的操作称为事务,而事务管理就是管理这些操作要么完全执行,要么完全不 ...

  2. 实验十三 MySQL多用户事务管理

    实验十三 MySQL多用户事务管理 一.  实验内容: 1. 事务机制的使用 2. 锁机制的使用 二.  实验项目:员工管理数据库 用于企业管理的员工管理数据库,数据库名为YGGL中,YGGL数据库中 ...

  3. Spring+Mybatis+MySql+Maven 简单的事务管理案例

    利用Maven来管理项目中的JAR包,同时使用Spring在业务处理层进行事务管理.数据库使用MySq,数据处理层使用Spring和Mybatis结合. 本案例代码主要结构如图: 1.数据库脚本 -- ...

  4. MySQL存储过程之事务管理

    原文链接:http://hideto.iteye.com/blog/195275 MySQL存储过程之事务管理 ACID:Atomic.Consistent.Isolated.Durable 存储程序 ...

  5. 测试MySQL事务管理

    1.MySQL 版本 mysql> select version(); +------------+ | version() | +------------+ -log | +--------- ...

  6. MySQL事务及Spring事务管理

    事务,是在数据库中用于保证数据正确性的一种机制,涉及到很多概念以及不同的情况,这里做一个总结 相关概念 事务四特性(ACID) 原子性(Atomicity,或称不可分割性):要么全部完成或者全部不完成 ...

  7. Mysql事务与JDBC事务管理

    一.事务概述 1.什么是事务 一件事情有n个组成单元 要不这n个组成单元同时成功 要不n个单元就同时失败 就是将n个组成单元放到一个事务中 2.mysql的事务 默认的事务:一条sql语句就是一个事务 ...

  8. 10.mysql事务管理及python操作

    在用户操作MySQL过程中,对于一般简单的业务逻辑或中小型程序而言,无需考虑应用MySQL事务.但在比较复杂的情况下,往往用户在执行某些数据操作过程中,需要通过一组SQL语句执行多项并行业务逻辑或程序 ...

  9. Oracle、MySQL和Sqlserver的事务管理、分页和别名的区别

    1.在mysql中事务默认是自动提交的,只有设置autocommit为0的时候,才用自己commit(commit--rollback回滚) 2.但是在oracle中必须自己commit;不然就只能结 ...

  10. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

随机推荐

  1. Cuda 9.2 CuDnn7.0 官方文档解读

    目录 Cuda 9.2 CuDnn7.0 官方文档解读 准备工作(下载) 显卡驱动重装 CUDA安装 系统要求 处理之前安装的cuda文件 下载的deb安装过程 下载的runfile的安装过程 安装完 ...

  2. shell 判断变量是否为空

    一句话判断 [ ! $a ] && echo "a is null" 1.判断变量 read -p "input a word :" word ...

  3. Qt5.4.1_静态编译

    http://www.cnblogs.com/findumars/p/4852350.html http://godebug.org/index.php/archives/133/ http://ww ...

  4. 最小生成树prim和kruskal模板

    prim: int cost[MAX_V][MAX_V]; //cost[u][v]表示边e=(u,v)的权值(不存在的情况下设为INF) int mincost[MAX_V]; //从集合X出发的每 ...

  5. 在jenkins和sonar中集成jacoco(一)--使用jacoco收集单元测试的覆盖率

    之前系统的持续集成覆盖率工具使用的是cobetura,使用的过程中虽然没什么问题,但感觉配置比较麻烦,现在准备改用jacoco这个覆盖率工具来代替它.接下来我介绍一下jenkins配置jacoco,并 ...

  6. xml生成javabean(zhuan)

    package com.dom4j; import java.io.File;import java.io.FileWriter;import java.io.IOException;import j ...

  7. New Concept English Two 26 70

    $课文68  纠缠不休 712. I crossed the street to avoid meeting him, but he saw me and came running towards m ...

  8. 从开发者的角度分析iOS应如何省电

    从开发者的角度分析iOS应如何省电 说明 网上关于iPhone如何省电的文章很多.但是基本没有讲原理.而在生活中,很多人在使用iPhone中有着明显的错误的省电习惯. 本文从iOS开发者的角度,对iO ...

  9. Linux磁盘分区扩容

    随着业务的增长,aliyun数据盘容量可能无法满足数据存储的需要,这时可以使用“”磁盘扩容“”功能扩容数据盘. 本文以一个SSD云盘的数据盘和一个运行Ubuntu 16..4 64位的 ECS 实例为 ...

  10. Java进行数据库导出导入 亲测可用

    /** * @param hostIP ip地址,可以是本机也可以是远程 * @param userName 数据库的用户名 * @param password 数据库的密码 * @param sav ...