[原创]MySQL下关于begin或start transaction是否真正开启新事务的探索?

Server version:         5.6.21-log MySQL Community Server (GPL)

前提提要:

我们知道MySQL的RR(repeatable read)隔离级别下,事务无法看到正在活跃的事务所做的操作包括提交后的。

一般手动开启事务的命令是begin或start transaction;我以前的理解是一旦执行这条语句就已经开启了事务,也就是事务id已经生成(可用于MVCC版本比较),事务A和事务B一起执行begin,事务A的所有操作的提交事务B都看不到;

事实是否定的;

环境:

mysql> show variables like ‘tx_iso%‘;
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)

mysql> show variables like ‘auto%‘;
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 1     |
| auto_increment_offset    | 1     |
| autocommit               | ON    |
| automatic_sp_privileges  | ON    |
+--------------------------+-------+
4 rows in set (0.00 sec)

mysql> show create table t12;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                    |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t12   | CREATE TABLE `t12` (
  `a` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `b` varchar(766) DEFAULT NULL,
  `c` int(11) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `b` (`b`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

实验结果是:事务B在未提交和为回滚的情况下,看到了事务A提交的数据;

一旦begin;之后紧跟着select语句就开启了事务;或者以start transaction with consistent snapshot开始事务,就无法看到事务A提交的数据;

也就是实现了非锁定一致性读;

结论:begin;start transaction;语句实际上并没有真正开启事务;

时间: 2024-10-14 01:06:50

[原创]MySQL下关于begin或start transaction是否真正开启新事务的探索?的相关文章

[原创]MySQL innodb_rollback_on_timeout参数对锁的影响

环境:Server version:         5.6.21-log MySQL Community Server (GPL) 前提提要: innodb_rollback_on_timeout是啥作用? 答:事务B在锁等待超时后是回滚事务内所有的statement还是最后一条语句: 0表示rollback最后一条语句,默认值:有点坑 1表示回滚事务B内所有的statements: 此参数是只读参数,需在my.cnf中配置,并且重启生效: 注意:回滚statements后不自动commit或

MySQL Study之--MySQL下图形工具的使用(MySQL Administrator)

MySQL Study之--MySQL下图形工具的使用(MySQL Administrator) 系统环境:     操作系统: Windows  7(64) 下载地址:http://www.softpedia.com/get/Internet/Servers/Database-Utils/MySQL-Administrator-for-Windows.shtml   官方介绍: MySQL Administrator is a powerful visual administration co

MySQL Study之--MySQL下图形工具的使用(MySQL Query Browser)

MySQL Study之--MySQL下图形工具的使用(MySQL Query Browser) 系统环境:     操作系统: Windows  7(64) 官方介绍: 1.安装和配置 下载:http://sqlbrowser.www2.pl/?act=download 下载地址:http://downloads.mysql.com/archives/query/ 安装: 2.启动和使用MySQL Query Browser 图一:登录界面 图二:查询表 图三:SQL语法 图四:查询数据字典(

MySQL Study之--MySQL下图形工具的使用(phpMyAdmin)

MySQL Study之--MySQL下图形工具的使用(phpMyAdmin) 系统环境: RedHat EL6 数据库:  MySQL 5.6.4-m7 phpMyAdmin是一个用PHP编写的软件工具,是以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库.借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便.其中一个更大的优势在于由于phpMyAdmin跟其他PHP

Rsyslog+Loganalyer+MySQL下部署日志服务器

Rsyslog+Loganalyer+MySQL下部署日志服务器 准备工作(三台Centos服务器Centos7): MySQL服务器(192.168.1.70):收集储存管理日志 web/Rsyslog服务器(192.168.1.52):搭建httpd服务,提供在web端查看日志信息 测试服务器(192.168.1.71):生成日志,并将日志信息发送给Rsyslog服务器 关闭防火墙和selinux 配置MySQL服务器 安装MySQL服务,创建用户,授权对Syslog数据库的访问. #yum

mysql下的SELECT INTO语句

在mysql下使用SELECT INTO语句会产生ERROR 1327 (42000): Undeclared variable:new_tablename 此时要使用: CREATE TABLE CYRTEMP(SELECT Cno,COUNT(Sno),AVG(Score) FROM CYRReports GROUP BY(Cno)); 来替代原句: SELECT Cno,COUNT(Sno),AVG(Score) INTO SUM_AVGSco FROM CYRReports GROUP

mysql下怎样运行脚本

假设要运行脚本: F:\hello world\niuzi.sql 第一种方法:        在命令行下(未连接数据库),输入 mysql -h localhost -u root  -p < F:\hello world\niuzi.sql (注意路径不用加引号的!!). 第二种方法:        在命令行下(已连接数据库,此时的提示符为 mysql> ),输入 source  F:\hello world\niuzi.sql (注意路径不用加引号的) 或者 \. F:\hello wo

Mysql下在某一列后即表的某一位置添加新列的sql语句

Mysql简介 MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库.  Mysql ALTER TABLE详细语法 ALTER TABLE用于更改原有表的结构.例如,您可以增加或删减列,创建或取消索引,更改原有列的类型,或重新命名列或表.您还可以更改表的评注和表的类型.ww

mysql下表的修复与优化

在很多的linux生产服务器里很多时候用数据库是mysql,在数据库里算是轻量级的数据库,但是长期以来的使用往往会出现一些问题,一般的状况是无法读取表,此时我们就要来修复表.优化表,减小磁盘使用量,以方便数据库的备份. 在用root用户进入mysql中,进入表所在的库 REPAIR TABLE `table_name` 修复表  OPTIMIZE TABLE `table_name` 优化表 REPAIR TABLE 的作用是用于修复表,而OPTIMIZE TABLE 用于回收闲置的数据库空间,