mysql的事务管理

时间:2022-09-21 20:08:27

学习程序的人经常会和数据库打交道,不同的数据库对支持的存储引擎的种类也不一样,例如Oracle数据库和SqlServer数据库就只支持一种存储引擎InnoDB,但是mysql却支持多种存储引擎。在dos里面输入show engines命令,就会mysql数据库支持的存储引擎,截图如下:

mysql的事务管理

Support表示是否支持该存储引擎,Comment是对该存储引擎的描述。其中MyISAM,MEMORY,InnoDB都是主流的储存引擎,在mysql5.5之前的版本中是将MyISAM作为默认的存储,而在mysql5.5之后的版本是将InnoDB作为默认的存储引擎。而MyISAM和InnoDB这两个存储引擎最大的区别就是MyISAM不支持事务管理,但是占用空间小,吃力速度快,而InnoDB支持事务管理,如果我们在建表的时候根据需求发现有的表不需要建立事务,那么我们就可以把表的存储引擎改为MyISAM,而且还快,更改表的存储引擎的sql语句是这样的:alter table 表名 engine="存储引擎名字";截图如下:

之前是InnoBD存储引擎,其中show create table 表名是查看表的结构:

mysql的事务管理

更改之后存储引擎就变成了MyIASM,截图如下:

mysql的事务管理


接下来,我来说一下,在数据库里面什么是事务。事务就是一个操作集合,这些操作要么都成功,要么都失败。举个例子:某人要给一个朋友转账,从A账户转账20000元到B账户,步骤应该是这样的:(1)从A账户中取出20000元,A账户中少了20000元。(2)把从A账户中取出的这20000元转给B账户这个过程。(3)B账户中收到了这20000元,B账户多了20000元。这三个过程要么同时成功,要么同时失败,这一系列操作被称为事务性操作。

事务有四种特点,被称为ACID特性:

原子性(Atomicity)当事务结束,它对所有资源状态的改变都被视为一个操作,这些操作要不同时成功,要不同时失败  
一致性(Consistency)操作完成后,所有数据必须符合业务规则,否则事务必须中止
隔离性(Isolation)事务以相互隔离的方式执行,事务以外的实体无法知道事务过程中的中间状态
持久性(Durable)事务提交后,数据必须以一种持久性方式存储起来


首先需要初始化事务,sql语句是这样的:start transaction,一般都会成功的,截图如下:

mysql的事务管理

这个时候你再在该表格中插入一条语句,截图如下:

mysql的事务管理

然后你再查看一下表里面的数据,发现刚才插入的那条数据存在,截图如下:

mysql的事务管理

但是如果你重新打开一个窗口的话,查询这张表,你就会发现在这张表里面之前插入的数据不见了,截图如下:

mysql的事务管理

但是如果你在插入成功之后,在写上一句commit语句(也叫事务提交),就表示提交成功,这个时候即使重开一个窗口,也是可以查到插入的语句。但是你如果不写commit语句,而是写成

rollback语句(也叫事务回滚),则之前插入的记录也就没有,不论你是不是重新开一个窗口,记录都是没有的。

接下来我来说一下事务的自动提交。写上一句set autocommit=0;(不写的话默认是set autocommit=1这就是手动提交,必须手动关闭),然后再进行数据的插入,插入完毕之后,你重新打开、

一个窗口,你会发现之前的插入记录不存在,因为set autocommit=0他是自动开启,手动提交。如果要打开一个一个窗口让它显示这条记录,则必须手动提交commit。截图如下:

·mysql的事务管理

注释:set autocommit=0:自动开启,手动提交

set autocommit=1:自动开启,自动提交 或者 手动开启,手动提交