1、关于事务的一些知识点
一组sql语句操作单元,组内所有sql语句完成一个业务。如果整组成功,意味着全部sql都实现。如果其中任何一个失败。意味着整个操作都失败。失败,意味着整个过程都是没有意义的。应该是数据库回到操作前的初始状态。
上面的特性,就是事务。
如何处理?
1)、失败后,可以回到开始位置
2)、没有成功之前,别的用户(进程,会话)是不能看到操作内的数据修改的。
思路:就是在一组操作之前,设计一个记号,备份点。
每当执行一个语句时,会把语句保存在一个事件日志中。如果成功,则会将结果提交到数据库内,意味着更改了数据库内容。
也就是说SQL的执行被分成了两个阶段:1)、执行阶段 2)、将执行结果,提交的数据库的阶段
其中我们的事务日志,就是保存执行阶段的结果,如果用于选择提交,才将执行结果提交到数据库。而默认的执行方式(我们普通的SQL语句)叫,自动提交,执行完毕,自动完成提交工作。因此必须关闭自动提交功能。那么如何关闭自动提交:
当设置 set autocommit=0;时,其实再update是是没有更新到数据库的。1)当update完后发现错误后(此时还没提交),可以执行rollback回滚;2)当update完后没有发现错误,可执行commit进行提交。
注:set autocommit=1;//自动提交,MySql默认是自动提交。
2、常见的事务的指令
开启事务:start transaction
关闭自动提交,如果事务结束了,成或败,都会将自动提交机制,回到start时的状态 成功:commit; 失败:rollback;
注:使用start transaction(可以使用begin来代替,但很少使用)开启事务而不使用set autocommit开启事务的原因:
使用start transaction开始事务,执行语句,commit提交后还会回到mysql还hiui回到初始的状态,不会影响到其他用户使用。
限定:事务在innodb下生效(DBD)
3、事务的特点(acid)
1)原子性
2)一致性
3)隔离性
4)持久性(此时已经在数据库改变了,不可以再rollback了)