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怎么测试事物_mysql事务简单测试相关推荐

  1. mysql 开启事物_mysql事务的开启

    mysql事务的开启 对于一个MYSQL数据库(InnoDB),事务的开启与提交模式无非下面这两种情况: 1>若参数autocommit=0,事务则在用户本次对数据进行操作时自动开启,在用户执行 ...

  2. mysql集群的使用与简单测试

    应用场景 当搭建了mysql集群后,现在应当需要使用该mysql集群了,在使用的过程中,和单节点的mysql极为相似. 操作步骤 1. 配置mysql集群 mysql集群已启动完毕,需要给mysql重 ...

  3. mysql隔离级别验证_MySQL事务隔离级别以及验证

    查询初始数据 开启A事务 并做更新操作 再另一端 B开始另一个事务查询 事务级别设置为读未提 查询到事务未提交的数据  a的count修改为3 但是没有提交 2 第二个级别 读已提交 避免脏读问题 但 ...

  4. mysql myisam 分表_mysql myisam简单分表设计

    一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法.目前我所知道的方法都是MYISAM的,INNODB如何做分表并且保留事务和外键,我还不是 ...

  5. MySQL不可读举例_MySQL事务隔离级别与相关示例(脏读、不可重复读、幻读)

    目录 MySQL8中隔离级别的变量跟之前的版本不一样,之前是tx_isolation,MySQL8改成了transaction_isolation.查看当前隔离级别的命令是 mysql> sel ...

  6. mysql spring隔离级别_MySQL事务与Spring隔离级别实现

    1.事务具有ACID特性 原子性(atomicity):一个事务被事务不可分割的最小工作单元,要么全部提交,要么全部失败回滚. 一致性(consistency):数据库总是从一致性状态到另一个一致性状 ...

  7. mysql交给spring管理_Mysql事务结合spring管理

    spring事务相关问题记录 遇到情况: 在本地单体应用调试代码时,发现在一个加了@transaction注解的方法里进行先更新后查询的操作,查询的结果是可以看到更新的内容的.而在微服务环境中同样的代 ...

  8. Mysql drop table 原理_mysql事务的实现原理

    此篇文章算是对mysql事务的一个总结,基本把mysql事务相关的知识点都涵盖到了,面试问来问去无非也就是这些,在了解这些之前我们先对mysql在执行的过程中 有一个整体的认识,如下图 如上图所示,M ...

  9. mysql与缓存脏读_MySQL 事务的隔离级别问题 之 脏读

    1. 脏读 所谓的脏读就是指一个事务读取了另一个事务未提取的数据. 试想一下:a账户要给b账户100元购买商品,如果a账户开启一个事务,执行下面的update语句做了如下转账的工作: update a ...

最新文章

  1. 怎么用leangoo做需求管理?(用户故事地图)
  2. h5网页中使用打电话功能
  3. Python 基础篇-python3安装pyHook和pywin32库
  4. wxpython是什么_请问wxpython中 event传递的什么参数?
  5. java基础----线程
  6. LeetCode (合集)合并链表和数组
  7. IOS autosizing(设置控件的固定位置大小)
  8. [Alpha]Scrum Meeting#4
  9. 为Android添加一门新语言
  10. python写字典_用python编写字典并将其写入HDF5-fi
  11. Python高级特性之---切片操作
  12. jdbc连接timesten_JDBC远程连接TimesTen
  13. java gps解析_GPS经纬度可以用来Java解析
  14. word插入公式/endnote
  15. mysql sphinx windows安装_Sphinx在windows下如何安装使用
  16. PS图片上传图片 同时生成微缩图
  17. firefox新标签页背景_如何更改或自定义Firefox的“新标签页”
  18. html img和背景图处理图片不拉伸_css如何设置背景图片拉伸不重复?
  19. java-静态对象:
  20. 质量体系建设——环境治理

热门文章

  1. Eureka与zookeeper
  2. 基于fedora23的karora23初始版本安装crt信赖libpng升级glibc造成系统无法进入...
  3. 《JavaScript快速全栈开发》作者Azat Mardanov:现在是拥抱Node技术栈的最佳时机
  4. [NHibernate]基本配置与测试
  5. mybatis处理查询map列表属性为null的问题,而导致查询map无该key对象
  6. LBS将使品牌口碑更真实
  7. 又一方案实现发行Token的功能,BCH平台Token即将迎来大爆发
  8. 二叉树的中序遍历(递归和非递归版本)
  9. 七 递归与二分法、匿名函数、内置函数
  10. 进来进程有人问表空间的迁移问题