事务:就是被绑定在一起作为一个逻辑工作单元的 SQL 语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过 ACID 测试,即原子性,一致性,隔离性和持久性。
锁:在所以的 DBMS 中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。
锁分悲观锁和乐观锁
悲观锁:共享锁;排他锁、更新锁
-
共享锁S:可同时读不可写;
-
排他锁X:只有一个事务可读写;
-
更新锁U:防止死锁;
理解:A和B同时申请S锁,要修改数据时AB都要升级为X锁,AB僵持,都等对方释放,造成死锁。若A之前申请了U锁,A可优先更新为X锁,可修改数据。(以下三个例子可以说明)
T1:select ...
T2:update...
T2要等T1执行完,T2要加X锁才能执行
T1:select ...
T2:select...
共享锁,T2不用等T1
-
T1:select...