事务是一系列的数据库操作,事务处理技术主要包括数据库恢复技术和并发控制技术。
定义:用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,不可分割,可以用来维护数据库的完整性。
工作过程:一组操作的每一步如果失败,都不再向下进行,都会退到这一组操作执行之前。
特性:
1 原子性->事务是数据库的逻辑工作单位,事务中的操作要么全做,要么全不做。
2 一致性->比如账户a给账户b转账,a账户减少钱,b账户增加钱,要么全发生,要么全不发生,两种都是一致性的。否则,就是不一致的。所以,事务执行的结果必须是使数据库从一个一致性状态便到另一个一致性状态。
3 隔离性->并发执行的各个事务之间互不干扰
4 持续性->一个事物一旦提交,它对数据库的数据的改变就是永久的,接下来的其他操作或故障都不应该对执行结果有任何影响。
(事务是恢复和并发控制的基本单位)
开启事务: start transaction 标记事务开始(操作不直接写入数据库,先写入事务日志)
回退:rollback 回退(撤销)start transaction之后的所有语句 (直接清空日志表,操作失败)
#注意:insert,update和delete语句可以回退,但是select语句和create和drop操作执行回退时不会被撤销
提交: commit 仅在不出错时写出更改,如果由于距失败,则不会提交。(操作成功时同步数据表)
保留点:savepoint xxx; (xxx是占位符的名字)
rollback to xxx; 可以实现回退到保留点,实现了部分回退。
自动事务处理:默认的mysql行为是自动提交所有的更改。
不自动提交的设置:
set autocommmit = 0; (直到再次被设为真)
自动关闭之后,需要手动来选择: commit 提交 rollback回滚