l Transactionmysql
l 事务:一个最小的不可再分的工做单元;一般一个事务对应一个完整的业务(例如银行帐户转帐业务,该业务就是一个最小的工做单元)程序员
l 一个完整的业务须要批量的DML(insert、update、delete)语句共同联合完成sql
l 事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不一样,DML语句的个数不一样数据库
事务由事务开始到事务结束之间执行的全体操做组成。安全
基本原理:mysql容许将事务统一进行管理(存储引擎innodb),将用户所作的操做暂时保存起来,不直接放到数据表(更新),等到用户确认结果以后再进行操做。服务器
事务在mysql中一般是自动提交的,可是也是可使用手动事务。并发
自动事务:autocommit ,当客户端发送一条SQL指令(写操做:增删改)给服务器的时候,服务器在执行以后,不用等待用户反馈结果,会自动将结果同步到数据表。atom
证实:打开两个客户端,一个客户端执行SQL指令,另外一个客户端查看执行结果。spa
自动事务:系统作了额外的步骤来帮助用户操做,系统是经过变量来控制的。autocommit3d
关闭自动事务:关闭以后系统就不在帮助用户提交结果了。
set autocommit = off;
查看执行结果
一旦自动事务关闭,那么须要用户提供是否同步的命令
Commit:提交(同步到数据表,事务会被清空)
Rollback:回滚(清空以前的操做,不要了)
事务没有提交的对比查看:在执行事务端的客户端中,系统在进行数据查看的时候会利用事务日志进行数据加工。
事务提交
一般,咱们不会关闭自动事务,这样操做麻烦。所以只会在须要使用事务处理的时候,才会进行操做(手动事务)
手动事务:不论是开始仍是过程仍是结束,都须要用户(程序员)手动发送对应的事务操做指令来实现。
手动事务的命令:
一、start transaction; 开启事务:从这条语句开始,后面的全部语句都不会直接写入到数据表(保存在事务日志中)
二、事务处理:多个指令构成
三、事务提交:commit/rollback,到这个时候全部的事务才算结束
将多个连续的可是是一个总体的SQL指令,逐一执行。
确认提交:commit,数据写到数据表,清空事务日志
回滚操做:rollback,全部数据无效并清空
回滚点:savepoint,当有一系列的事务操做时,而其中的步骤若是成功了没有必要从新来过,那么能够在某个成功点设置一个记号(回滚点),若是后面有失败,那么能够回到这个记号位置。
回滚点在自动事务关闭后才能使用。set autocommit = off;
一、增长回滚点:savepoint 回滚点名字; //字母数字和下划线构成
二、回到回滚点:rollback to 回滚点名字; //那个记号(回滚点)以后的全部操做没有了
注意:若是在一个事务处理汇总,若是有不少步骤,那么能够设置多个回滚点。可是若是回到了前面的回滚点,后面的回滚点就失效。
事务具备4个属性:原子性、一致性、隔离线持久性。这四个属性一般称为ACID特性
原子性(atomicity):一个事务是一个不可分割的工做单位,事务中包括的诸操做要么都作,要么都不作
事务从事务开始起到事务提交,要么全部操做都成功,要么全部操做都失败。
一致性(consistency):事务必须是使数据库从一致性状态变到另外一个一致性状态,一致性和原子性是密切相关的。
数据表中的数据修改,要么是全部操做一次性都修改,要么根本不动。
隔离性(isloation):
一个事务的执行不能被其余事务干扰。即一个事务内部的操做及使用的数据对并发的其余事务是隔离的,并发执行的各个事务之间不能互相干扰
一个客户端在使用事务操做一个数据(多是一行或者整表)的时候,另一个客户端不能对该数据进行操做。
何时是行被隔离?何时是整表被隔离?
说明:若是条件中使用了索引(主键),那么系统是根据主键直接找到某条记录,这个时候与其余记录无关,那么只隔离条记录;反之,若是说系统是经过全表检索(每一条记录都去检查,没有索引),被检索的全部数据都会被锁定(整表)
持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其余操做或故障不该该对其有任何影响。