Auth: jin
Date: 20140507

一、事务控制
默认情况下,MySQL是自动提交(autocommit)的,如果需要通过明确的commit和rollblack来提交和回滚事务,那么需要通过明确的事务控制命令来开始事务。
SET AUTOCOMMIT, START TRANSACTION,COMMIT和ROLLBACK等语句支持本地事务。
1、开始一个项新的事务
START TRANSACTION 或BEGIN语句可以开始一项新的事务。
2、提交回滚事务
COMMIT和ROLLBACK用来提交回滚事务
3、在事务提交或回滚之后的操作
CHAIN和RELEASE 字句分别用来定义在事务提交或回滚之后的操作。
CHAIN会立即开启一个新事务,并且和刚才的事务具有相同的隔离级别
RELEASE 会断开和客户端的链接。
4、修改当前的链接的提交方式
SET AUTOCOMMIT 可以修改当前的链接的提交方式,如果设置了SET AUTOCOMMIT=0, 则设置之后的所用事务都需要通过明确的命令提交或回滚。

实例
CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(25) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
注意要innodb,MyISAM不支持事务
session 1
mysql> insert into t1(name) value ('diege');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;
+----+-------+
| id | name |
+----+-------+
| 1 | diege |
+----+-------+
1 row in set (0.00 sec)

session 2
mysql> select * from t1;
+----+-------+
| id | name |
+----+-------+
| 1 | diege |
+----+-------+
1 row in set (0.00 sec)

mysql> SET AUTOCOMMIT=0;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t1(name) value ('lily');
Query OK, 1 row affected (0.00 sec)

session 1
mysql> select * from t1;
+----+-------+
| id | name |
+----+-------+
| 1 | diege |
+----+-------+
1 row in set (0.00 sec)
数没有新的数据,因为事物没有提交。
session 2
mysql> commit;
Query OK, 0 rows affected (0.02 sec)
session 1
mysql> select * from t1;
+----+-------+
| id | name |
+----+-------+
| 1 | diege |
| 2 | lily |
+----+-------+
2 rows in set (0.00 sec)
提交事物后有数据了

二、事务回滚
在事务中可以通过定义SAVEPOINT,指定回滚事务的一个部分,但是不能指定提交事务的一个部分。事务回滚需要启动一个事务
session A
mysql> select * from t1;
+----+-------+
| id | name |
+----+-------+
| 1 | diege |
| 2 | lily |
+----+-------+
2 rows in set (0.00 sec)
mysql> SET AUTOCOMMIT=0;
Query OK, 0 rows affected (0.00 sec)
开始一个事务
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t1(name) value ('tom');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;
+----+-------+
| id | name |
+----+-------+
| 1 | diege |
| 2 | lily |
| 3 | tom |
+----+-------+
3 rows in set (0.00 sec)

定义一个savapoint点名为backup1
mysql> savepoint backup1;
Query OK, 0 rows affected (0.00 sec)
再插入一条数据
mysql> insert into t1(name) value ('json');
Query OK, 1 row affected (0.00 sec)
mysql> select * from t1;
+----+-------+
| id | name |
+----+-------+
| 1 | diege |
| 4 | json |
| 2 | lily |
| 3 | tom |
+----+-------+
4 rows in set (0.00 sec

回滚到刚才定义的savepoint
mysql> rollback to savepoint backup1;
Query OK, 0 rows affected (0.01 sec)
查看回滚后数据情况
mysql> select * from t1;
+----+-------+
| id | name |
+----+-------+
| 1 | diege |
| 2 | lily |
| 3 | tom |
+----+-------+
3 rows in set (0.00 sec

这时其他session session B数据情况
mysql> select * from t1;
+----+-------+
| id | name |
+----+-------+
| 1 | diege |
| 2 | lily |
+----+-------+
2 rows in set (0.00 sec)
数据没有变化
回到session A提交事务
mysql> commit;
Query OK, 0 rows affected (0.00 sec
session B 再查看数据
mysql> select * from t1;
+----+-------+
| id | name |
+----+-------+
| 1 | diege |
| 2 | lily |
| 3 | tom |
+----+-------+
3 rows in set (0.00 sec)
可以看到新的数据,并且只有savapoint之前的数据。

mysql事务简单测试的更多相关文章

  1. 大数据学习day33----spark13-----1.两种方式管理偏移量并将偏移量写入redis 2. MySQL事务的测试 3.利用MySQL事务实现数据统计的ExactlyOnce(sql语句中出现相同key时如何进行累加(此处时出现相同的单词))4 将数据写入kafka

    1.两种方式管理偏移量并将偏移量写入redis (1)第一种:rdd的形式 一般是使用这种直连的方式,但其缺点是没法调用一些更加高级的api,如窗口操作.如果想更加精确的控制偏移量,就使用这种方式 代 ...

  2. Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性

    一.简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费. 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求 ...

  3. JAVA中JDBC连接Mysql数据库简单测试

    一.引用库 maven库:mysql:mysql-connector-java:6.0.6 二.SDK环境 JAVA JDK10 三.测试代码 package com.mysql.mysqlconne ...

  4. 技术分享 | 简单测试MySQL 8.0.26 vs GreatSQL 8.0.25的MGR稳定性表现

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. M ...

  5. MYSQL 事务测试

    mysql 事务测试 创建张表 lock1 增加字段 id,name . 增加两条记录 1,a 2,b 启动第一个会话 BEGIN; update lock1 set name='c' where i ...

  6. MySQL——事务(transaction)简单总结

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

  7. mysql事务测试

    mysql事务测试 打开mysql的命令行,将自动提交事务给关闭 --查看是否是自动提交 1表示开启,0表示关闭 select @@autocommit; --设置关闭 set autocommit ...

  8. MySQL事务隔离级别测试实例

    https://www.cnblogs.com/huanongying/p/7021555.html MySQL事务隔离级别 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommit ...

  9. 商品库存“存取设计”,MySQL事务、表锁、行锁

    MySQL  使用 SELECT ... FOR UPDATE 做事务写入前的确认 以MySQL 的InnoDB 为例,预设的 Tansaction isolation level 为 REPEATA ...

随机推荐

  1. 安全测试===sqlmap(零)转载

    本文转自:https://blog.werner.wiki/sqlmap-study-notes-0/ 感谢作者的整理,如有侵权,立删 零.前言 这篇文章是我学习Sqlmap的用法时做的笔记,记录了S ...

  2. linux下运行jmeter脚本

    1. win下生成测试计划   2. 上传至linux下 3.运行测试计划   sh jmeter.sh -n -t second_login.jmx -l res.jtl 错误1: solution ...

  3. hdu 1455(DFS+好题+经典)

    Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  4. Multiply Strings——面试题

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  5. python2下向文件写入unicode编码的内容,codecs包

    python内置库中的open方法只能读写ascii码,如果想写入Unicode字符,需要使用codecs包. # -*- coding: utf-8 -*- import codecs import ...

  6. Eolinker——前置用例的使用

    如下补充均是Eolinker的文档中未说明的部分 1.在Eolinker的API自动化测试中,点击“前置用例”,“添加前置用例” 2.给添加的接口命名完之后,点击名称进入到编辑页面,代码输入框的内容为 ...

  7. 【JBPM4】创建流程实例

    示例代码: ProcessEngine processEngine = Configuration.getProcessEngine(); ExecutionService executionServ ...

  8. (编译)使用 AppCenter 持续输出导出到 Application Insights

    原文地址:https://blog.xamarin.com/appcenter-continuous-export-application-insights/ 五星手机应用有一个特殊的特点:他们不会放 ...

  9. 【剑指offer】面试题 64. 求 1+2+3+...+n

    面试题 64. 求 1+2+3+...+n 题目:求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 1.采 ...

  10. POJ 2777.Count Color-线段树(区间染色+区间查询颜色数量二进制状态压缩)-若干年之前的一道题目。。。

    Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 53312   Accepted: 16050 Des ...