mysql 事务与commit

创建日期: 2022-10-14 09:41 | 作者: 风波 | 浏览次数: 16 | 分类: MySQL

左边启动一个事务,然后插入一个数据;右边启动一个事务,然后插入一个数据,为啥右边插入的数据的 ID 会在左边的基础上自增1呢?

表结构如下:

USE test;

SET NAMES utf8mb4;

CREATE TABLE `actor` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT 'name',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
);
session 1 session 2
初始状态,表为空
mysql> select * from actor;
Empty set (0.00 sec)
初始状态,表为空
mysql> select * from actor;
Empty set (0.00 sec)
开启一个事务:start transaction;
开启一个事务:start transaction;
插入一条数据:insert into actor (name) values ('name-a');
查看结果:select * from actor \G,有一条数据
id: 1
name: name-a
create_time: 2022-10-14 09:39:28
update_time: 2022-10-14 09:39:28
查看结果:select * from actor \G
Empty set (0.00 sec) 无数据
插入一条数据:insert into actor (name) values ('name-b');
Query OK, 1 row affected (0.00 sec)
查看数据:select * from actor \G;
只有一条数据:
id: 2
name: name-b
create_time: 2022-10-14 09:39:59
update_time: 2022-10-14 09:39:59
注:奇怪的事情出现了,为什么id 是2,当前 session 的事务是和左边 session 的事务隔离的啊。
提交事务:commit ;
Query OK, 0 rows affected (0.05 sec)
查询数据:mysql> select * from actor \G,结果还是只有一条
id: 1
name: name-a
create_time: 2022-10-14 10:34:43
update_time: 2022-10-14 10:34:43
提交事务:commit ;
Query OK, 0 rows affected (0.08 sec)
查询数据:select * from actor \G ,结果有两条
id: 1
name: name-a
create_time: 2022-10-14 10:34:43
update_time: 2022-10-14 10:34:43
------------------ 2. row -----------------
id: 2
name: name-b
create_time: 2022-10-14 10:35:57
update_time: 2022-10-14 10:35:57
查询数据:select * from actor \G,结果也是两条
id: 1
name: name-a
create_time: 2022-10-14 10:34:43
update_time: 2022-10-14 10:34:43
---------------- 2. row ------------------
id: 2
name: name-b
create_time: 2022-10-14 10:35:57
update_time: 2022-10-14 10:35:57

  1. 如果使用 start transaction ;开启一个事务,最后退出session之前没有执行 commit,那么事务中操作的数据不会保存到数据库。
  2. 事务是隔离的,但是自增 id 之间貌似不是隔离的。
16 浏览
9 爬虫
0 评论