mysql事务

mysql事务

事务:一组sql语句操作单元,组内所有sql语句完成一个业务.注意只有innodb和bdb可以使用事务安全

如果整组成功则意味着全部sql语句都实现。如果其中任何一个失败,意味着整个操作失败。失败意味着整个过程都是没意义的,数据库应该回到最初始的状态。上面的特性,就是事务。

如何处理:失败后,可以回到开始位置、没有成功之前,别的用户(进程,对话)是不能看到操作内的数据修改的

思路:就是在一组操作之前,设计一个记号(备份点)。操作成功就让别人看到数据的修改,如果失败别人就不能看到修改,而且回到记号位置。

实现:利用innodb存储引擎的事务日志功能。

sql执行分为2个阶段:一个是执行阶段一个是将执行结果提交到数据库的阶段。其中我们的事务日志,就是保存执行阶段的结果。如果可以用,则将执行的结果提交到数据库

数据库默认的执行方式是:自动提交(autocommit)。执行完后自动完成提交工作。想要完成事务安全就需要关闭自动提交功能。set autocommit=0;

例:交班费业务30元:包含两条sql语句update `sm_student` set `s_money`=`s_money`-30 where id=1; update `class` set `c_money`=`c_money`+30 where id=1;

关闭自动提交后执行update语句本mysql服务器端显示少了30而另一个进程则会显示没有减少。

在此基础上执行所有的sql语句判断是否成功(出现错误,语法错误或逻辑错误或服务器错误)。成功:结果提交commit 失败:回到开始位置rollback。

提交commit:这次sql操作执行完毕

返回rollback:这次sql操作无效返回到开始值

常见的事务指令:开启事务:start transaction;关闭自动提交,如果事务结束了。成或败它都会将自动提交机制设为初始状态。

事务特点:原子性(不可拆分)、一致性(数据锁定)、隔离性、持久性 ACID