5.1 问题
具体操作如下:
创建innodb存储引擎的表
关闭服务的自动提交功能
测试事务特性
5.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:创建innodb存储引擎的表
1)数据库管理员root登录,创建新库、新表。
[root@host50 ~]# mysql -uroot -p123456 //访问服务
mysql> create database db10; //建库
Query OK, 1 row affected (0.05 sec)
mysql> use db10; //切换库
Database changed
mysql>
mysql> create table a(id int)engine=innodb; //建表并指定存储引擎
Query OK, 0 rows affected (0.52 sec)
步骤二:关闭服务的自动提交功能
1)数据库管理员root登录,关闭服务的自动提交功能。
mysql> show variables like "%commit%"; //查看所有包涵commit 字样的变量
+-----------------------------------------+-------+
| Variable_name | Value |
+-----------------------------------------+-------+
| autocommit | ON | //自动提交功能开启
| binlog_group_commit_sync_delay | 0 |
| binlog_group_commit_sync_no_delay_count | 0 |
| binlog_order_commits | ON |
| innodb_api_bk_commit_interval | 5 |
| innodb_commit_concurrency | 0 |
| innodb_flush_log_at_trx_commit | 1 |
| slave_preserve_commit_order | OFF |
+-----------------------------------------+-------+
8 rows in set (0.01 sec)
mysql> set autocommit=off ; 关闭自动提交
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like "autocommit"; //查看
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF | //已处于关闭状态
+---------------+-------+
1 row in set (0.00 sec)
mysql>
步骤三:测试事务特性
1)插入新记录,不执行提交命令commit
mysql> insert into db10.a values(101); //插入记录
Query OK, 1 row affected (0.00 sec)
mysql> select * from db10.a ;//查看记录
+------+
| id |
+------+
| 101 |
+------+
1 row in set (0.00 sec)
mysql>
2)打开新终端访问数据服务,查看不到插入的数据
注:此处打开的终端称为终端2 , 此处之前终端被称为终端1
[root@host50 ~]# mysql -uroot -p123456
mysql> select * from db10.a; //没有记录
Empty set (0.00 sec)
mysql>
3)终端1 执行提交命令commit
mysql> select * from db10.a ;
+------+
| id |
+------+
| 101 |
+------+
1 row in set (0.00 sec)
mysql> commit ; 执行提交命令
Query OK, 0 rows affected (0.08 sec)
4)第终端2执行查看命令
mysql> select * from db10.a;
Empty set (0.00 sec)
mysql> select * from db10.a; //查看到数据
+------+
| id |
+------+
| 101 |
+------+
1 row in set (0.00 sec)
mysql>
5)在终端1删除记录 ,不执行提交命令commit
将/etc/passwd文件复制到/var/lib/mysql-files/目录下,
mysql> select * from db10.a ; //删除前查看
+------+
| id |
+------+
| 101 |
+------+
1 row in set (0.00 sec)
mysql> delete from db10.a ;//删除表记录
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> select * from db10.a ; //查看不到记录
Empty set (0.00 sec)
6)在终端2 依然可以查看到记录
mysql> select * from db10.a;
+------+
| id |
+------+
| 101 |
+------+
1 row in set (0.00 sec)
mysql>
7)在终端1,执行回滚命令
mysql> select * from db10.a ; //回滚前查看
Empty set (0.00 sec)
mysql>
mysql> rollback ; //数据回滚
Query OK, 0 rows affected (0.03 sec)
mysql>
mysql> select * from db10.a ; //回滚后查看
+------+
| id |
+------+
| 101 |
+------+
1 row in set (0.00 sec)
mysql>
mysql> delete from db10.a ; //删除记录
Query OK, 1 row affected (0.00 sec)
mysql> commit ; //提交
Query OK, 0 rows affected (0.08 sec)
mysql>
mysql> rollback ; //数据回滚
Query OK, 0 rows affected (0.00 sec)
mysql> select * from db10.a ; //查看不到记录
Empty set (0.00 sec)
mysql>
8)在终端2 也查看不到记录
mysql> select * from db10.a;
Empty set (0.00 sec)