mysql事务简单测试
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事务简单测试的更多相关文章
- 大数据学习day33----spark13-----1.两种方式管理偏移量并将偏移量写入redis 2. MySQL事务的测试 3.利用MySQL事务实现数据统计的ExactlyOnce(sql语句中出现相同key时如何进行累加(此处时出现相同的单词))4 将数据写入kafka
1.两种方式管理偏移量并将偏移量写入redis (1)第一种:rdd的形式 一般是使用这种直连的方式,但其缺点是没法调用一些更加高级的api,如窗口操作.如果想更加精确的控制偏移量,就使用这种方式 代 ...
- Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性
一.简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费. 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求 ...
- JAVA中JDBC连接Mysql数据库简单测试
一.引用库 maven库:mysql:mysql-connector-java:6.0.6 二.SDK环境 JAVA JDK10 三.测试代码 package com.mysql.mysqlconne ...
- 技术分享 | 简单测试MySQL 8.0.26 vs GreatSQL 8.0.25的MGR稳定性表现
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. M ...
- MYSQL 事务测试
mysql 事务测试 创建张表 lock1 增加字段 id,name . 增加两条记录 1,a 2,b 启动第一个会话 BEGIN; update lock1 set name='c' where i ...
- MySQL——事务(transaction)简单总结
简介: MySQL事务操作主要用于处理操作量大,复杂度高的数据,比如说,在人员管理系统中要删除一个人员,你既要删除他的基本资料,也要删除该人员的相关信息,如文章.信箱等.这些数据库操作语句就构成了一个 ...
- mysql事务测试
mysql事务测试 打开mysql的命令行,将自动提交事务给关闭 --查看是否是自动提交 1表示开启,0表示关闭 select @@autocommit; --设置关闭 set autocommit ...
- MySQL事务隔离级别测试实例
https://www.cnblogs.com/huanongying/p/7021555.html MySQL事务隔离级别 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommit ...
- 商品库存“存取设计”,MySQL事务、表锁、行锁
MySQL 使用 SELECT ... FOR UPDATE 做事务写入前的确认 以MySQL 的InnoDB 为例,预设的 Tansaction isolation level 为 REPEATA ...
随机推荐
- .gitignore 文件添加或更新后规则无效的解决方案
项目已经提交之后,突然想忽略某个文件或目录 A,于是在 .gitignore 里添加了忽略规则.但是提交(commit)之后,发现一旦修改了 A,git 同样会检测到 A 的变化(changes) , ...
- XCopy复制文件夹命令及参数详解以及xcopy拷贝目录并排除特定文件
XCOPY是COPY的扩展,可以把指定的目录连文件和目录结构一并拷贝,但不能拷贝系统文件:使用时源盘符.源目标路径名.源文件名至少指定一个:选用/S时对源目录下及其子目录下的所有文件进行COPY.除非 ...
- Linux操作系统中内存buffer和cache的区别--从free命令说起(转)
原文链接:http://os.51cto.com/art/200709/56603.htm 我们一开始,先从Free命令说起. Free free 命令相对于top 提供了更简洁的查看系统内存使用情况 ...
- 【linux】crontab定时命令
参考来源: http://blog.csdn.net/ariessurfer/article/details/7459183 http://www.jb51.net/LINUXjishu/19905. ...
- poj-1113
Wall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 31419 Accepted: 10619 Descriptio ...
- python中的偏函数partial
Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的偏函数和数学意义上的偏函数不一样. 在介绍函数参数的时候,我们讲到,通过 ...
- poj 1579(动态规划初探之记忆化搜索)
Function Run Fun Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17843 Accepted: 9112 ...
- JAVA版数据库主键ID生成器
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public clas ...
- yum -y install 和yum install 的区别
yum -y install 包名(支持*) :自动选择y,全自动 yum install 包名(支持*) :手动选择y or n yum remove 包名(不支持*) rpm -ivh 包名(支持 ...
- 解决报错:Access denied for user 'root'@'xxx' ,MySQL不允许从远程访问的方法 .
原文地址:传送门 例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话. GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDEN ...