事务
事务就是一系列将要发生或者正在发生的连续操作。
事务安全就是一种保护连续操作同时实现(完成)的机制。事务安全的意义就是保护数据操作的完整性。
事务操作
事务操作自动事务(默认)和手动事务。
就让我们以银行转账(A转钱给B)为例:
手动事务的操作流程:
- 开启事务,告诉系统以下的所有操作,不要直接写入数据库,先存到事务日志。
基本语法: start transaction; - 减少A账户的余额,虽然A账户的余额减少了,但是由于开启了事务,数据表真实的数据并没有同步更新。
- 增加B账户的余额。但是,由于我们开启了事务,数据表真实的数据,仍然没有同步更新。
- 提交事务或者回滚事务
- 提交事务基本语法: commit;
- 回滚事务基本语法:rollback;
如果我们选择提交事务,则将事务日志存储的记录直接更新到数据库,并清除事务日志;如果我们选择回滚事务,则直接将事务日志清除,所有在开启事务至回滚事务之间的操作失效,保持原有的数据库记录不变。在这里,我们以提交事务为例:
**注意:**当我们提交事务之后,在进行回滚事务是不起作用的,因为事务日志在提交事务的同时已经被清除啦!
事务原理
事务原理:在事务开启之后,所有的操作都会被临时存储到事务日志,事务日志只有在收到commit命令之后,才会将操作同步到数据表,其他任何情况都会清空事务日志,例如突然断开连接、收到rollback命令等。
回滚点
**回滚点:**在某个操作成功完成之后,后续的操作有可能成功也有可能失败,但无论后续操作的结果如何,前一次操作都已经成功了,因此我们可以在当前成功的位置,设置一个操作点,其可以供后续操作返回该位置,而不是返回所有操作,这个点称之为回滚点。关于回滚点的基本语法为,
设置回滚点: savepoint + 回滚点名称;
返回回滚点: rollback to + 回滚点名称;
自动事务
开启自动事务:set autocommit = 1;
关闭自动事务处理:set autocommit = 0;
事务的特性
事务的特性,可以简单的概括为ACID,具体为:
原子性:Atomic,表示事务的整个操作是一个整体,是不可分割的,要么全部成功,要么全部失败;
一致性:Consistency,表示事务操作的前后,数据表中的数据处于一致状态;
隔离性:Isolation,表示不同的事务操作之间是相互隔离的,互不影响;
持久性:Durability,表示事务一旦提交,将不可修改,永久性的改变数据表中的数据。
其实数据库的事务机制和操作系统的锁机制是差不多道理一样的。