MySQL--事务
基本原理(必须是INNODB存储引擎):将用户所做操作暂时保存起来,不直接存到数据表,等到用户确认结果之后,再执行操作。
事务处理图解事务在mysql重通常是自动提交的,但是也可以手动事务
自动事务(autocommit)
当客户端发送一条sql指令(写操作,增删改)给服务器执行之后,不用等待用户反馈结果,会自动同步到数据表。
可以同构哦autocommit
show variable like 'autocommit'关闭之后就不会帮助用户自动提交了:set autocommit off。
一旦关闭,需要提供是否同步的命令
commit: 提交
rollback:回滚,清空之前的操作
通常不会关闭自动事务,只会在需要使用的时候才会进行操作。
手动事务
命令:
start transaction;开启事务,从这条语句开始,后面所有语句都不会直接写入到数据表(而是保存在事务日志中)
事务处理:多个写指令构成
事务提交:commit/rollback,到这个时候事务才结束。
开启事务:start transaction;
执行事务:
将多个连续但是一个整体的sql指令逐一执行
将多个事务同时执行
提交事务:
确认提交:commit
回滚操作:rollback;
回滚点(savepoint):
当有一系列事务操作是,其中步骤成功了,不需要重新来过,就可以设置回滚蒂娜,后面如果失败,可以回滚到记号位置
增加回滚点:savepoint 回滚点名字;//字母和下滑线构成
回到回滚点:rollback to 回滚点名字; //回滚点之后的操作就没有了
注意,在一个事务处理中,有很多步骤,可以设置多个回滚点,但是如果回到前面的回滚点,后面的回滚点就失效。
事务特点:
隔离性例子原子性(atomicity):事务是一个不可分割的工作单位,事务中包括的诸多操作要么不做,要么都做,事务从start transaction起到提交事务(commit|rollback)要么成功,要么失败
一致性(consistency):事务必须是使数据库从一个一直行状态,变到另一个一致性状态,一致性与原子性是密切相关的。数据表中的数据修改,要么一次性修改,要么不变。
隔离性(isolation):一个事务的执行不能被其他事务干扰。即:一个事务内部操作及使用 的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。如果一个客户端,在使用事务操作一个数据(可能是一行/整个表)的时候,另一个客户端不能对该数据进行操作
如果条件中使用了索引(主键)那么系统是根据主键直接找到某条记录,这时候,与其他记录无关,只隔离一条数据,如果没有索引,系统是通过全表索引(每一条记录都会去检查被检索的所有数据都会被锁定(整表)
持久性(durability)/永久性(permanence):指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,接下来其他操作或故障不应该对其有影响(commit之后,所有操作不可返回)