这篇文章主要介绍“MySQL事务的意思是什么”,在日常操作中,相信很多人在Mysql事务的意思是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql事务的意思是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的防城网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
一. 什么是事务。
知道事务,要先了解mysql的引擎,在5.5版本以前mysql的引擎默认是MyISAM,到了Mysql5.5版本以后,才有了InnoDB,两者的区别之一就是InnoDB支持事务。
事务就是进行一次处理的基本单元,要么完全执行,要么都不执行。
二. 事务的特性(ACID)。
A,也就是原子性(Atomicity)。可以理解为组成物质的基本单位,也是我们进行数据处理操作的基本单位,必须是一个整体不可分割。
C,就是一致性(Consistency)。一致性指的就是数据库在进行事务操作后,会由原来的一致状态,变成另一种一致的状态。也就是说当事务提交后,或者当事务发生回滚后,数据库的完整性约束不能被破坏。
I,就是隔离性(Isolation)。它指的是每个事务都是彼此独立的,不会受到其他事务的执行影响。也就是说一个事务在提交之前,对其他事务都是不可见的。
D,指的是持久性(Durability)。事务提交之后对数据的修改是持久性的,即使在系统出故障的情况下,比如系统崩溃或者存储介质发生故障,数据的修改依然是有效的。因为当事务完成,数据库的日志就会被更新,这时可以通过日志,让系统恢复到最后一次成功的更新状态。(这里就涉及到了回滚日志和重做日志的相关知识了)
三. 事务的使用操作。
start transaction 或者 begin #开启事物 savepoint #在事物中创建一个保存点,方便后面可以回滚到某个点的操作 commint #事务提交,这里提交后就相当于完成了,对数据库的改动就是永久性的了。 rollback #事务回滚,执行这个就是将此次的事务中全部的操作都恢复到事物开始前的状态 rollback to [savepoint] #将事务回滚到某个保存点 release savepoint #删除某个保存点 set transaction #设置事务的隔离级别
事务有隐式事务和显式事务两种方式,数据库默认一般都是隐式事务。
1.1. 隐式事务,每次修改数据库后不需要手动commit命令,就直接修改数据库并保存结果,比如一般的增删改操作;
1.2. 显示事务,需要在操作完最后一步,手动commit命令提交事务。
#创建数据库 mysql> create table user( -> name varchar(255), -> primary key (name) -> ) engine=InnoDB; Query OK, 0 rows affected (0.08 sec) #开启事务 mysql> begin; Query OK, 0 rows affected (0.00 sec) #插入数据 mysql> insert into user select '张三'; Query OK, 1 row affected (0.01 sec) Records: 1 Duplicates: 0 Warnings: 0 #查询,这里显示已经有了一条数据,但是我们还没有commit命令提交 mysql> select * from user; +--------+ | name | +--------+ | 张三 | +--------+ 1 row in set (0.00 sec)
这里我们通过mysql的可视化工具去查看,或者在打开一个终端去查看
#查看数据,显示的为空,因为我们上面的事务还没提交,这也就是事务的第三个特性(I),隔离性 mysql> select * from user; Empty set mysql>
我们返回之前的终端commit提交事务,在来查询。
mysql> insert into user select '张三'; Query OK, 1 row affected (0.01 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> select * from user; +--------+ | name | +--------+ | 张三 | +--------+ 1 row in set (0.00 sec) #提交 mysql> commit; Query OK, 0 rows affected (0.04 sec) mysql>
在另一个终端查询
mysql> select * from user; Empty set mysql> select * from user; +--------+ | name | +--------+ | 张三 | +--------+ 1 row in set (0.00 sec) mysql>
这里在事务没有提交前,也就是插入数‘张三’,没有commit之前,别的任何查询都查不到这条数据,但是事务内查询是有这条数据,这就是事物隔离性,如果最后没有commit
,而是执行的rollback
,那么整个事务回滚,‘张三’这条数据依然不存在事务结束,这也就是事务的一致性,前后的状态都是一致的。
到此,关于“Mysql事务的意思是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!