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 ...
随机推荐
- java基础 流程控制和条件语句,循环语句
顺序结构 程序的顺序结构: 如果代码里没有流程控制,程序是按照书写的格式从上而下一行一行执行的, 一条语句执行完之后继续执行下一条语句,中间没有判断和跳转,直到程序的结束. if语句 if语句使用bo ...
- linux内核网络接收数据流程图【转】
转自:http://blog.chinaunix.net/uid-23069658-id-3141409.html 4.3 数据接收流程图 各层主要函数以及位置功能说明: 1)s ...
- C#数据没初始化,使用会报错,可以初始化null
protected void Page_Load(object sender, EventArgs e) { string[] A; if (B== 0) { A = new string[] {1, ...
- FISCO-BCOS平台共识
FISCO-BCOS 应用于区块链的多节点并行拜占庭容错共识算法 看了下微众平台的wiki共识知识 学习下 ()内是自己的思考 参考: https://github.com/FISCO-BCOS/W ...
- JVM 核心机制(类加载器、自定义文件系统类加载器、网络自定义类加载器
- scp命令详解—跨服务器复制文件
scp在跨机器复制的时候为了提高数据的安全性,使用了ssh连接和加密方式,如果机器之间配置了ssh免密码登录,那在使用scp的时候密码都不用输入. 在服务器104.238.161.75上操作,将服务器 ...
- Java学习笔记(七)——获取类中方法的信息,java的LinkedList
[前面的话] 在实际项目中学习知识总是最快和最有效的,既能够较好的掌握知识,又能够做出点东西,还是简单的知识总结,最近一直在总结笔记,写的东西还是比较水,希望慢慢可以写出一些干货. 学习过程中的小知识 ...
- git-全家桶
关于git,网上一片赞美之声,我就不多说啥了,用过才知道,多好. 没有了解过的朋友,可以去大神廖雪峰传送门看看,我就是通过那里学会的基础,再次感谢大神无私的奉献!!! 下面分四个章节: 基础操作(其实 ...
- undefined symbol: _ZNSt8ios_base4InitD1
undefined symbol: _ZNSt8ios_base4InitD1 用gcc编译C++动态库导致,用g++编译就好了
- react native 增加react-native-storage
现时需要使用react-native-storage本地存储 第一步:配置storage主文件 mystorage.js import { AsyncStorage } from 'react-nat ...