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. java中static关键字的使用

    知识点:java中,static关键字修饰类的变量.方法.代码块.内部类 场景:我们在创建类的方法和变量时,如果这个类在创建多个对象时,共用同一个属性或者方法,就可以使用static关键字修饰,因为s ...

  2. 从零开始,使用Docker Swarm部署集群教程

    本文首先从Dockerfile创建了一个简单web镜像 然后将web镜像推送到了远程仓库,以备后面集群中不同机器自动下载 之后使用docker-compose.yml配置了一个应用 而后新建了2台虚拟 ...

  3. Ubuntu16 nginx安装http_image_filter_module模块

    目录 配置image_filter 配置 重启nginx 如何安装呢? 安装image_filter模块依赖的库. 查看之前的配置 添加上图片模块[由于它是系统模块,不需要额外下载,直接添加就可以了] ...

  4. Visitor(访问者)

    意图: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 适用性: 一次性实现一个算法的不变的部分, ...

  5. RabbitMQ入门_02_HelloWorld

    A. AMQP基础 RabbitMQ 并不是基于 Java 开发人员熟悉的 JMS 规范设计开发的,而是基于一个比 JMS 更新更合理的 AMQP (Advanced Message Queuing ...

  6. 这些HTML、CSS知识点,面试和平时开发都需要 No10-No11(知识点:表格操作、代码编写规则)

    系列知识点汇总 1.基础篇 这些HTML.CSS知识点,面试和平时开发都需要 No1-No4(知识点:HTML.CSS.盒子模型.内容布局) 这些HTML.CSS知识点,面试和平时开发都需要 No5- ...

  7. PistgreSQL9.6手册(基础摘录)

    学习目的:基础使用. 能够开发RoR就行. git: https://github.com/postgres-cn/pgdoc-cn 1.2. 架构基础 PostgreSQL使用一种客户端/服务器的模 ...

  8. mysql中InnoDB存储引擎的行锁和表锁

    Mysql的InnoDB存储引擎支持事务,默认是行锁.因为这个特性,所以数据库支持高并发,但是如果InnoDB更新数据的时候不是行锁,而是表锁的话,那么其并发性会大打折扣,而且也可能导致你的程序出错. ...

  9. UVALive 5903 Piece it together 二分匹配,拆点 难度:1

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  10. input type="file"在各个浏览器下的默认样式,以及修改自定义样式

    一.<input type="file"/>在各个浏览器中的默认样式: 系统 浏览器 样式效果 点击效果 mac google 点击按钮和输入框都可以打开文件夹 mac ...