什么是事务?
1.事务就是一组原子性的SQL操作或者一个独立的工作单元,事务内的语句要么全部执行成功,要么全部执行失败。
2.事务是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。
1.事务出现的原因
1.对 多句sql 提供 原子性操作,这个原子操作的 重点 就是 commit 和 rollback
(并且 针对 原子操作的 执行失败的 回滚,采用了 日志记录sql的 方式)
(同时,与原子操作 不同的是,手动提供 rollback操作 和 手动提供 commit操作)
2.因为事务设计出来了,以后 sql的 所有执行,都是以事务为基础的,那么顺其自然
对并发的控制,也是以事务为基础的
2.事务设计出来后,满足的特性
1.原子性:要么成功,要么失败(回滚操作,由 日志文件记录 sql语句),并且不能中断
且 不会释放 cpu 和 共享资源
2.事务一致性:事务执行前后,mysql要是一致性的(这是根据,mysql的大规定来的
不管怎么设计事务,都得保证 数据库的一致性)
3.持久性:即 事务 commit后,原子操作成功,不能再回滚了,要想回滚就得在 commit之前
手动 rollback 或 自动 rollback
4.隔离性:????
3.为了实现事务的 功能,采取的实现办法
1.mysql 提供了,日志文件记录记录我们的操作(便于 原子操作失败的 回滚)
2.mysql 提供了 rollback机制 和 commit机制,便于 我们对 原子操作的更好的掌握
1. 执行到 commit, 代表原子操作 成功执行,不能回滚
2. 没有执行到 commit,代表原子操作 还没有成功执行,还有回滚的机会
1.自动回滚
代表,执行到commit之前,有sql出错,全部回滚
2.手动回滚
1.代表,执行commit之前,不管是否有 sql出错,你都想手动 回滚,让原子操作失败
2.实际 手动回滚,常常用在 多句sql的执行结果,不满足我想要的结果(不是sql出错)
那尽管sql执行成功,但是我们依然 可以手动 rollback,这也是 mysql提供我们
事务 与 原子性 最大的不同,同时我们常常用 业务逻辑来判断 如果结果满足
commit,如果结果不满足 rollback
|