1、 死锁四个条件:
Mutual Exclusion 互斥条件(资源不能共享,只能由一个进程享用);
Hold and Wait 持有并等待(进程已经拥有者某个资源,在等待另外一个资源);
No preemptive 非抢占式资源(已经分配的资源不能从相应的进程中抢夺出来);
Circuit wait 系统中的若干进程组成环路(环路中每个进程都在等待相邻进程正占用的资源)。
2、锁的分类:
两种类型的锁: locks
共享的(S) 锁允许一个事务去读一行tuple。
独占的锁(X) 允许一个事务更新或删除一行。
表锁定,页锁定,行锁定?
看看mysql 使用的是什么存储引擎,以区分对锁定的支持:SHOW TABLE STATUS FROM database_name 。ok ,是InnoDB ,它实现标准行级锁定。
锁的有效期决定于transaction 或者for update 这类语句在何时结束或者roll back 。
如果有select * from table for update 此类语句,那么就是表锁定。
如果有select * from table where id between 1 and 10000 for update 此类语句,那么就是页级锁定。
如果有select * from table where id= 1 for update 此类语句,那么就是行级锁定。
3、事务Transaction
四个基本条件ACID
原子性Atomicity, 原子性属性用于标识事务是否完全地完成,一个事务的任何更新要在系统上完全完成,如果由于某种原因出错,事务不能完成它的全部任务,系统将返回到事务开始前的状态。
一致性Consistency, 当许多用户同时使用和修改同样的数据时,事务必须保持其数据的完整性和一致性。
隔离性Isolation, 隔离性问题引发了事务的可串行化问题。隔离性不仅仅保证多个事务不能同时修改相同数据,而且能够保证事务操作产生的变化直到变化被提交或终止时才能对另一个事务可见,并发的事务彼此之间毫无影响。(DataBase书上写道:在一个有多个事务并发执行的数据库系统中,如果对共享数据的更新不加以控制,事务就可能看到由别的事务的更新引起的中间状态的不一致,这种情况会导致对数据库中存储的数据的错误更新。所以数据库系统必须提供隔离机制以保证事务不受其他并发执行的事务影响,这个特性叫隔离性。)
持久性Durability, 持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的。许开发者认为不管系统以后发生了什么变化,完成的事务是系统永久的部分。(DataBase书上写到:一旦事务成功执行,其影响必须保存在数据库中。一个系统故障不应该导致数据库忽略完成的事务,这个特性叫做持久性)
DBMS主要包括四部分:
recovery_management 负责 automicity;
transaction_designer/DBS application programmer 负责 consistency;
concurrency_control 负责 isolation;
recovery_management 负责 durablity.