序言:将一些列操作作为单个逻辑工作单元处理的事务,是数据库运用过程不可或缺的功能,在学习事务之前我们需要了解一下mysql中的储存引擎

13.1什么是存储引擎?

13.1.1储存引擎

  1. mysql的功能大致分为两种:<br /> 1.连接客户端和提前检查sql语句内容的功能,即数据库处理的前台部分。<br /> 2.是根据前台的显示,完成查询文件操作等工作的功能,即后台部分,这个部分被称为存储引擎<br /> **所以,mysq的存储引擎就是,根据sql语句完成操作文件工作的功能的部分。**

13.1.2存储引擎的种类:

              mysql中预置了多个存储引擎,用户可以根据使用目的和个人喜欢进行选择。同时,每个表都可以单独指定存储引擎,因此,**存储引擎相互独立允许用户自主进行选择,正是mysql的特性**<br />**                                          **mysql中可以使用的存储引擎↓图<br />                 ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12862216/1622617872120-8980499e-8275-4489-901a-07b5a75d45c3.png#clientId=u1f5ff952-c8e4-4&from=paste&height=225&id=u05c1ebdf&margin=%5Bobject%20Object%5D&name=image.png&originHeight=449&originWidth=1351&originalType=binary&size=644917&status=done&style=none&taskId=ud47af275-2b65-4f11-8ebb-9c4abc729dd&width=675.5)

13.2设置存储引擎

13.2.1确认存储引擎

               可以通过show create table 来查看表的详细信息,从而可以看到表中的存储引擎。<br />              ** 语法:**

show create table 表明

           **示列 确认tb的存储引擎**
mysql> show create table tb;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tb    | CREATE TABLE `tb` (
  `empid` varchar(10) DEFAULT NULL,
  `sales` int(11) DEFAULT NULL,
  `month` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

13.2.2修改存储引擎

          表的存储引擎可以被修改。<br />   **  语法:**

alter table 表明 engine=存储引擎名;

示列:修改存储引擎

mysql> alter table tb engine=innodb;
Query OK, 0 rows affected (0.10 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> show create table tb;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tb    | CREATE TABLE `tb` (
  `empid` varchar(10) DEFAULT NULL,
  `sales` int(11) DEFAULT NULL,
  `month` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

13.3什么是事务

  **事务展示的示列**:<br />      ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12862216/1622618994127-6fbecb43-f650-44b1-b3cb-7ad6d91f73ea.png#clientId=u1f5ff952-c8e4-4&from=paste&height=238&id=u54af3ed1&margin=%5Bobject%20Object%5D&name=image.png&originHeight=475&originWidth=1390&originalType=binary&size=662922&status=done&style=none&taskId=u47a198b2-2e95-4043-8a3f-3ef76e28873&width=695)<br />      事务:将多个操作作为单个逻辑工作单元处理的功能称为事务。将事务开始之后的处理结果反映到数据库中的操作称为**提交(commit)**。不反映到数据库中而是恢复原来状态的操作称为回滚(**rollback**)。

13.4使用事务

13.4.2开启事务

      开启事务是使用start transaction命令或者直接输入begin 或 begin work<br />     **   语法;**

start transaction

    示列:通过事务把tb表中的数据删除之后在恢复
/*1.开启事务*/
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
/*2.删除tb表中所有数据*/
mysql> delete  from tb;
Query OK, 10 rows affected (0.02 sec)

mysql> select * from tb;//发现为空,但此时并未向数据库中提交
Empty set (0.00 sec)
mysql> rollback;//此时回滚事务,将该删除操作不映射到数据库中
Query OK, 0 rows affected (0.01 sec)

mysql> select * from tb;
+-------+-------+-------+
| empid | sales | month |
+-------+-------+-------+
| A103  |   101 |     4 |
| A103  |   101 |     4 |
| A104  |   181 |     5 |
| A101  |   184 |     4 |
| A103  |    17 |     5 |
| A101  |   300 |     5 |
| A102  |   205 |     6 |
| A104  |    93 |     5 |
| A103  |    12 |     6 |
| A107  |    87 |     6 |
+-------+-------+-------+
10 rows in set (0.00 sec)

mysql>

image.png

13.5自动提交功能

   在mysql中执行命令,处理通常会直接提交。也就是说所有的命令都会自动commit。这种自动进行提交的功能,称为自动提交功能。<br />      在默认情况下,自动提交功能处于开启状态。但是,当存储引擎为InnoDB时,如果输入start transaction 或者直接输入 begin,在执行commit之前就不会提交。

13.5.1关闭自动提交功能

执行set autocommit=0;就会关闭自动提交功能<br />  ** 示列:**
mysql>  set autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql>

要注意的是,如果在关闭自动提交的状态下,如果没有进行commit就退出mysql,工作内容就不会反映到数据库中去

13.5.2启动已关闭的自动提交功能

语法:

set autocommit=1;

示列:

mysql> set autocommit=1;//打开自动提交功能
Query OK, 0 rows affected (0.00 sec)

mysql>

扩展;可以通过 select @@autocommit来确认当前自动提交功能的状态,如果是1则为打开,0则是关闭。

mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
|            1 | /*打开状态*/
+--------------+
1 row in set (0.00 sec)

mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
|            0 | /*关闭状态*/
+--------------+
1 row in set (0.00 sec)

mysql>

13.5.3事务的使用范围:

image.png