My SQL事务

上一篇 / 下一篇  2015-08-31 17:55:27 / 个人分类:数据库

事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。

事务的ACID概念:
原子性(atomicity):
一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚。对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。

一致性(consistency):
数据库总是从一个一致性的状态转换到另外一个一致性的状态。

隔离性(isolation):
通常来说,一个事务所做的修改在最终修改提交以前,对其他事务时不可见的。

持久性(durability):
一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。

隔离性其实比想象的要复杂。在SQL标准中定义了四种隔离级别。
READ UNCOMMITTED(未提交读)
READ COMMITTED(提交读)
REPEATABLE READ(可重复读)
SERIALIZABLE(可串行化)

死锁
死锁是指两个或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。当多个事务试图以不同的顺序锁定资源是,就可能会产生死锁。多个事务同时锁定同一个资源时,也会产生死锁。
为了解决这种问题,数据库系统实现了各种死锁检测和死锁超时机制。越复杂的系统,越能检测到死锁的循环依赖,并立即返回一个错误。另一种解决方式是,当查询的时间达到锁等待超时的设定后放弃锁请求。
死锁发生以后,只有部分或者完全回滚其中一个事务,才能打破死锁。对于事务型的系统,这是无法避免的,所以应用程序在设计时必须如何考虑处理死锁。大多数情况下只需要重新执行因死锁回滚的事务即可。


TAG: 事务

 

评分:0

我来说两句

Open Toolbar