事务:一组逻辑操作单元,使数据从一种状态变换到另外的一种状态。
一组逻辑操作单元:一个或多个DML操作
事务处理(事务操作):保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有事务都被提交,要么这些修改都永久的保存下来或者数据管理系统将放弃所作的所有整改,整个事务回滚到最初的状态
如:首先数据库中有这样的数据 用户A和用户B都各自有1000¥
用户A向用户B转账100元,那么此时数据库进行数据更新 A->900
B->1100
这样的一个转账操作就是一个事务,这个事务不可以分割,也就是说A转账和B收账不可分割,在这个整体中,肯定是有多行代码一起完成的,如:
a.update()
100/0
b.update()
此时代码内部发生了错误,但是,此时a.update()这条代码已经执行了,但是b.update()还没有执行
这样就不符合我们的实情了,此时,我们需要将这个事务回滚回到最开始的状态,A->1000,B->1000
也就是说,为保证数据库中的数据的一致性,数据的操作应当是离散的成组的逻辑单元:当它们全部完成后,数据的一致性可以保持,而当这个单元中的一部分操作失败,整个事务应全部视为错误,所有从起始点以后的操作应该全部回退到开始状态。
数据一旦提交,就不可以回滚
那么哪些操作会导致数据的自动提交?
- DDL操作(数据库定义语言 如:create table xxx)一旦执行,都会自动提交(set autocommit=false对于DDL失效)
- DML(SQL语句)默认情况下,一旦执行,就会自动提交(可以通过set autocommit=false的方式取消DML操作的自动提交)
- 默认关闭连接时,会自动提交数据