29事务的隔离级别
- 格式:docx
- 大小:15.71 KB
- 文档页数:3
事务隔离级别及应用场景事务隔离级别是数据库中解决并发访问问题的重要机制之一。
不同的隔离级别提供了不同程度的隔离和并发控制,并且在不同的场景下应用不同的隔离级别可以保证数据的一致性和并发性能。
常见的四种事务隔离级别包括:读未提交(Read Uncommitted)、读提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
1. 读未提交(Read Uncommitted)在该隔离级别下,事务可以读取其他事务尚未提交的数据。
这种级别最低,提供最低的隔离程度,存在脏读、不可重复读和幻读的问题。
适用于对数据一致性要求不高,但是要求并发性能高的场景。
2. 读提交(Read Committed)在该隔离级别下,事务只能读取已经提交的数据。
读取过程中,其他事务对该数据的修改将被阻塞,直至修改提交。
解决了脏读的问题,但是仍然存在不可重复读和幻读的问题。
适用于对数据一致性要求较高,但是对并发性能要求较低的场景。
3. 可重复读(Repeatable Read)在该隔离级别下,事务在读取的过程中,其他事务对该数据的修改也将被阻塞,直至读取完成。
解决了脏读和不可重复读的问题,但是仍然存在幻读的问题。
适用于对数据一致性要求高,但是对并发性能要求一般的场景。
4. 串行化(Serializable)在该隔离级别下,事务对数据的读取和修改都将进行加锁,其他事务无法读取和修改已被锁定的数据,从而实现了最高的隔离性。
解决了脏读、不可重复读和幻读的问题,但是牺牲了并发性能,一次只能有一个事务能够对数据进行读取和修改。
适用于对数据一致性要求极高,但是对并发性能要求非常低的场景。
不同的隔离级别根据场景的需求决定使用,为了保证数据的一致性和并发性能,应根据业务需求选择不同的隔离级别。
例如,在金融领域的转账系统中,对数据的一致性要求非常高,不能允许出现脏读、不可重复读和幻读的问题。
数据库事务隔离级别与并发控制详解随着数据库的广泛应用,对于数据库事务隔离级别和并发控制的需求也越来越高。
为了保证数据库的数据一致性和可靠性,数据库系统采用了事务隔离级别和并发控制机制。
本文将详细介绍数据库事务隔离级别和并发控制的概念和原理,以及不同隔离级别的特点和应用场景。
首先,我们来了解什么是事务隔离级别。
事务隔离级别指的是多个事务同时运行时彼此之间的影响程度,它提供了一种机制来控制事务的隔离程度,以确保事务在并发环境下执行的可靠性。
数据库管理系统定义了四个标准的事务隔离级别,分别为读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
读未提交是最低级别的隔离级别,它允许一个事务读取到另一个事务尚未提交的数据。
这个隔离级别最容易导致脏读(Dirty Read)问题,即一个事务读取到了由另一个未提交事务所修改的数据。
读已提交是数据库系统的默认隔离级别,它保证一个事务读取到的数据是已经提交的数据,解决了脏读的问题。
但是读已提交隔离级别可能导致不可重复读(Non-repeatable Read)的问题,即一个事务多次读取同一数据时,得到的结果不一致。
为了解决不可重复读的问题,可重复读隔离级别引入了额外的机制。
在该隔离级别下,一个事务多次读取同一数据时,会得到一致的结果,即使其他事务修改了该数据。
可重复读隔离级别解决了不可重复读的问题,但依然可能导致幻读(Phantom Read)的问题。
幻读指的是在一个事务中的两次查询过程中的数据行的数量发生了不一致的情况。
最高级别的事务隔离级别是串行化,该级别通过对事务进行加锁的方式来实现隔离。
串行化隔离级别确保所有事务按照顺序依次执行,避免了脏读、不可重复读和幻读的问题。
但是串行化的隔离级别会导致系统的并发性能大幅下降,因此在实际应用中很少使用。
除了事务隔离级别,数据库还需要采取并发控制的措施来保证事务的并发执行安全可靠。
数据库事务的隔离级别及不同级别的实现方式随着数据库中的数据越来越庞大,对于数据的并发操作和事务处理的需求也越来越迫切。
为了保证数据的一致性、可靠性和隔离性,数据库引入了事务概念,并提供了不同的隔离级别供用户选择。
本文将介绍数据库事务的隔离级别以及不同级别的实现方式。
一、数据库事务的概念数据库事务是指由数据库操作组成的逻辑工作单元,可以通过一系列的数据库操作来对数据库进行读写操作。
通常,一个事务应该具备以下四个特性,即ACID特性:1. 原子性(Atomicity):事务中的操作要么全部成功执行,要么全部失败回滚。
2. 一致性(Consistency):事务执行使数据库从一个一致状态变到另一个一致状态。
3. 隔离性(Isolation):并发的事务之间不会相互干扰,每个事务都感觉不到其他事务的存在。
4. 持久性(Durability):一旦事务被提交,其所做的更改将会永久保存在数据库中。
二、事务的隔离级别数据库提供了四个标准的事务隔离级别,分别是读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
不同的隔离级别对事务的隔离性和性能有不同的影响。
1. 读未提交(Read Uncommitted)读未提交是最低的隔离级别,它允许一个事务读取到另一个事务未提交的数据。
这个级别的实现方式是通过在事务内部没有加锁,可以读取并发事务尚未提交的数据。
由于事务之间没有隔离性,可能导致脏读(Dirty Read)。
2. 读已提交(Read Committed)读已提交隔离级别要求一个事务只能读取到已经提交的数据。
这个级别的实现方式是通过在事务内部对读取的数据加排他锁。
由于并发事务会不断提交,可能导致不可重复读(Non-repeatable Read)。
3. 可重复读(Repeatable Read)可重复读要求一个事务执行期间都能保持一致的读取结果。
掌握数据库中的事务隔离级别和数据库锁机制数据库中的事务隔离级别和数据库锁机制是数据库管理系统用来处理并发访问数据库的重要特性。
事务隔离级别定义了在并发访问的情况下事务之间的隔离程度,而数据库锁机制则用于控制并发访问时的数据一致性和完整性。
在数据库中,事务是一组需要被执行为一个单元的操作,这些操作要么全部执行成功并作为一个整体提交,要么全部回滚。
事务隔离级别确定了在并发事务执行时,一个事务对其他事务数据的可见性。
一共有四个标准的事务隔离级别,分别是:1.读未提交(Read Uncommitted):最低级别的事务隔离级别,它允许一个事务读取到另一个事务尚未提交的未经验证的数据。
这种隔离级别可能会导致脏读(Dirty Read)问题,即一个事务读取到另一个事务尚未提交的数据,然后后者回滚。
2.读已提交(Read Committed):每个事务只能读取到已经提交的数据。
这种隔离级别避免了脏读问题,但可能会出现不可重复读(Non-Repeatable Read)问题,即一个事务在多次读取同一数据时,读取的结果不一致。
3.可重复读(Repeatable Read):保证同一事务多次读取同一数据时,结果是一致的,即使其他事务对该数据进行了修改。
这种隔离级别避免了不可重复读的问题,但可能会出现幻读(Phantom Read)问题,即一个事务在多次查询同一范围的数据时,结果集发生了变化。
4.串行化(Serializable):最高级别的事务隔离级别,它通过强制事务串行执行来避免任何并发问题。
这种隔离级别可以避免脏读、不可重复读和幻读的问题,但会带来极大的性能开销。
数据库锁机制是用来处理并发访问时的数据一致性和完整性的重要组成部分。
它可以防止数据被多个事务同时修改而导致的数据不一致问题。
数据库锁可以分为两种类型:共享锁和排他锁。
-共享锁(Shared Lock):也称为读锁,它用于控制读取操作。
多个事务可以同时获得共享锁,但不能同时获得排他锁,因为排他锁会阻塞其他事务的共享锁申请。
事务的四种隔离级别数据库四⼤特性:原⼦性:要么全部执⾏,要么全部回滚。
⼀致性。
“确保⼀致性是⽤户的责任,⽽不是DBMS。
”,“DBMS假定每个事务都保持⼀致性”。
数据库和数据管理员通过其他三个特性来保证⼀致性。
即是:从⼀正确的状态转换到另⼀个正确的状态隔离性:⼀个事务在另外⼀个事务完成后或者完成前完成。
持久性:物理化信息。
1,读未提交,Read Uncommited。
指的是⼀个事务读取到另外⼀个事务还没有提交的内容。
这种情况是必须要避免的。
因为其他事务未提交的数据,是随时有可能进⾏回滚的,所以,任何时候,都不应该允许程序读取到某个事务还未提交的数据。
如果读取到了别的事务未提交的数据,这种情况称为脏读。
要想解决脏读的问题,可以提⾼数据库的事务隔离级别,把事务隔离级别设置为读已提交。
2,读已提交,Read Committed。
这个隔离级别可以解决脏读的问题。
在该隔离级别下,允许在⼀个事务执⾏的过程中,另外⼀个事务得到执⾏并提交。
这样,会出现⼀种情况,第⼀个事务前后两次select出来的某⾏数据,值可能不⼀样。
值改变的原因是,穿插执⾏的事务2对该⾏数据进⾏了update操作。
在同⼀个事务中,两次select出来的值不相同的问题称为不可重复读问题。
要想解决不可重复读问题,需要把数据的隔离级别设置为可重复读。
3,可重复读。
Repeatable Read。
在这个隔离级别下,可以解决不可重复读的问题。
在该隔离级别下,在⼀个事务使⽤某⾏的数据的过程中,不允许别的事务再对该⾏数据进⾏操作。
可重复读应该是给数据库的⾏加上了锁。
这种隔离级别下,依旧允许别的事务在该表中插⼊和删除数据,于是就会出现,在事务1执⾏的过程中,如果先后两次select出符合某个条件的⾏,如果在这两次select直接另⼀个事务得到了执⾏,insert或delete了某些⾏,就会出现先后两次select出来的符合同⼀个条件的结果不⼀样,第⼀次select好像出现了幻觉⼀样,因此,这个问题也被成为幻读。
数据库事务处理考试试卷(答案见尾页)一、选择题1. 数据库事务处理的基本目标是什么?A. 提高数据安全性B. 确保数据的完整性和一致性C. 加快数据访问速度D. 降低存储成本2. 事务处理系统的主要特性不包括以下哪一项?A. 原子性(Atomicity)B. 一致性(Consistency)C. 隔离性(Isolation)D. 持久性(Durability)3. 在数据库系统中,一个事务可能包含多个操作,这些操作可以被视为一个整体,这体现了事务的哪个特性?A. 原子性B. 一致性C. 隔离性D. 持久性4. 下列哪一个选项不是事务处理系统必须具备的特性?A. 数据安全性B. 数据完整性C. 性能优化D. 可恢复性5. 在数据库事务处理中,如果事务T对数据项D加了S锁,则其他事务对数据项D的哪些操作是不允许的?A. 读取数据项DB. 修改数据项DC. 删除数据项DD. 对数据项D加锁6. 在并发控制中,哪种锁机制可以防止多个事务同时修改同一条记录?A. 共享锁(Shared Locks)B. 排他锁(Exclusive Locks)C. 更新锁(Update Locks)D. 意向锁(Intention Locks)7. 数据库事务处理的四个基本特性是什么?A. 原子性(Atomicity)B. 一致性(Consistency)C. 隔离性(Isolation)D. 持久性(Durability)8. 在数据库事务处理中,如何确保数据的隔离性?A. 使用锁机制B. 使用多版本并发控制(MVCC)C. 使用事务日志D. 使用行级锁9. 什么是死锁?如何避免死锁?A. 死锁是指两个或多个事务互相等待对方释放资源的情况。
B. 避免死锁的方法包括按照固定顺序请求资源、超时设置、使用锁超时等。
C. 死锁只发生在多个事务同时访问多个资源的情况下。
D. 死锁是数据库系统的正常现象,无需处理。
10. 在数据库事务处理中,如何处理事务失败的情况?A. 自动回滚B. 手动回滚C. 重新启动事务D. 强制结束事务11. 什么是ACID属性?它们在数据库事务处理中的作用是什么?A. 原子性(Atomicity):保证事务中的操作要么全部成功,要么全部失败。
数据库事务管理的隔离级别与选择数据库事务是一组数据库操作的执行单元,可以保证数据库的一致性和完整性。
在多用户并发访问数据库时,为了解决并发访问可能引发的问题,数据库系统引入了事务的隔离级别。
事务的隔离级别定义了一个事务对于其他事务操作的可见性,包括事务的并发控制、数据一致性和性能。
事务隔离级别可分为以下四个级别:1. 读未提交(Read Uncommitted):在这个隔离级别下,一个事务所做的修改即使未提交,其他事务也能读取到该修改的数据。
这种隔离级别可能导致脏读、不可重复读和幻读的问题。
2. 读已提交(Read Committed):在这个隔离级别下,一个事务所做的修改只有在提交之后,其他事务才能读取到该修改的数据。
这种隔离级别可以避免脏读问题,但无法避免不可重复读和幻读的问题。
3. 可重复读(Repeatable Read):在这个隔离级别下,一个事务所读取的数据,在该事务的整个生命周期中都保持一致。
其他事务无法修改或删除该事务读取的数据,但可以新增数据。
这种隔离级别可以避免脏读和不可重复读问题,但无法避免幻读的问题。
4. 串行化(Serializable):在这个隔离级别下,数据库系统将事务串行执行,避免了并发带来的问题。
这种隔离级别可以实现最高级别的数据完整性和一致性,但是会导致性能上的损失。
根据具体的应用场景和需求,选择合适的事务隔离级别非常重要,以平衡并发性能和数据一致性。
下面是一些选择隔离级别的经验指导:1. 如果应用对数据一致性要求比较低,但并发性要求较高,可以选择读未提交隔离级别。
这种隔离级别可以获得最高的并发性能,但是会带来严重的数据一致性问题,不建议在一些关键业务场景中使用。
2. 如果应用对数据一致性要求较高,可以选择读已提交隔离级别。
这种隔离级别可以避免脏读问题,适合大多数业务场景。
但是由于其他事务可以修改已提交的数据,不可重复读和幻读问题仍然存在。
3. 如果应用需要保证读取的数据在事务的整个生命周期中都保持一致,可以选择可重复读隔离级别。
数据库事务的隔离级别与锁机制数据库事务的隔离级别与锁机制是在数据库系统中确保数据并发处理的一种重要机制。
隔离级别定义了多个事务之间的可见性和干扰程度,而锁机制则用于管理数据的并发访问和更新。
1. 数据库事务的隔离级别数据库系统提供了四个事务隔离级别:- 读未提交(Read Uncommitted):事务可以读取其他事务未提交的数据,容易引发脏读、不可重复读和幻影读问题。
- 读已提交(Read Committed):事务只能读取其他事务已提交的数据,避免了脏读问题,但仍可能出现不可重复读和幻影读问题。
- 可重复读(Repeatable Read):事务在对某个数据进行读取时,能够确保其他事务不能修改该数据,避免了脏读和不可重复读问题,但仍可能出现幻影读问题。
- 串行化(Serializable):事务的读取和写入完全串行化执行,避免了所有并发问题,但牺牲了并发性能。
不同的隔离级别可以根据实际需求进行选择,低级别的隔离级别提供了更高的并发性能,而高级别的隔离级别则提供了更严格的数据一致性。
2. 锁机制锁机制用于管理事务对数据库的并发访问和更新,可以避免数据不一致和并发冲突问题。
常见的锁包括共享锁(Shared Lock)和排他锁(Exclusive Lock)。
- 共享锁(S锁):多个事务可以同时对同一数据进行读取,但不允许进行数据的修改操作。
这种锁机制适用于读取密集型操作,可以提高并发性能。
- 排他锁(X锁):只允许单个事务对数据进行读取和修改操作。
其他事务必须等待当前事务释放锁之后才能对该数据进行操作。
这种锁机制适用于写入密集型操作,可以确保数据的一致性和完整性。
锁机制的使用需要根据具体的并发处理需求进行选择,过多的锁可能会导致性能下降,而过少的锁可能会导致并发冲突和数据不一致。
3. 隔离级别与锁机制的关系隔离级别和锁机制是联系紧密的,不同的隔离级别会在并发访问和更新时采取不同的锁机制来保证数据的一致性。
数据库事务处理与并发控制试卷(答案见尾页)一、选择题1. 数据库事务的基本特性包括()。
A. 原子性B. 一致性C. 隔离性D. 持久性2. 在数据库系统中,事务必须满足的条件有()。
A. 原子性B. 一致性C. 隔离性D. 持久性3. 下列哪些选项是数据库事务的正确隔离级别?()A. 读未提交B. 读已提交C. 可重复读D. 串行化4. 在并发控制中,死锁是指两个或多个事务在互相等待对方释放资源的情况下,无法继续执行的状态。
请判断以下哪些情况可能导致死锁?()A. 先请求资源R1,再请求资源R2B. 先请求资源R1,再请求资源R2,然后释放资源R1C. 先请求资源R1,再请求资源R2,然后请求资源R3D. 先请求资源R1,再请求资源R2,然后释放资源R1,接着请求资源R25. 什么是ACID属性?()A. 原子性(Atomicity)B. 一致性(Consistency)C. 隔离性(Isolation)D. 持久性(Durability)6. 数据库事务具有哪些特性?(ACID)A. 原子性(Atomicity)B. 一致性(Consistency)C. 隔离性(Isolation)D. 持久性(Durability)7. 在数据库系统中,如何实现事务的隔离性?(ABC)A. 使用锁机制(Locking Mechanism)B. 使用多版本并发控制(Multi-Version Concurrency Control, MVCC)C. 使用时间戳(Timestamp)D. 使用死锁检测(Deadlock Detection)8. 什么是死锁?(D)A. 两个或多个事务互相等待对方释放资源B. 一个事务无法完成执行C. 数据库系统崩溃D. 以上都不是9. 如何解决死锁问题?(AB)A. 避免长时间持有锁B. 使用锁超时(Lock Timeout)C. 回滚事务(Rollback Transaction)D. 重新启动事务10. 什么是并发控制?(C)A. 确保数据库系统的安全性B. 确保数据库系统的完整性C. 确保数据库系统的并发性和性能D. 确保数据库系统的可靠性11. 在数据库系统中,如何处理并发访问冲突?(ABC)A. 使用锁机制(Locking Mechanism)B. 使用乐观锁(Optimistic Locking)C. 使用悲观锁(Pessimistic Locking)D. 使用时间戳(Timestamp)12. 什么是乐观锁?(B)A. 一种并发控制策略,通过假设冲突很少发生来减少锁的使用B. 一种并发控制策略,通过在读取数据时检查数据是否被其他事务修改来判断是否存在冲突C. 一种并发控制策略,通过在提交事务时检查数据是否被其他事务修改来判断是否存在冲突D. 一种并发控制策略,通过在写入数据时检查数据是否被其他事务修改来判断是否存在冲突13. 什么是悲观锁?(C)A. 一种并发控制策略,通过在读取数据时检查数据是否被其他事务修改来判断是否存在冲突B. 一种并发控制策略,通过在提交事务时检查数据是否被其他事务修改来判断是否存在冲突C. 一种并发控制策略,通过在写入数据时检查数据是否被其他事务修改来判断是否存在冲突D. 一种并发控制策略,通过在读取数据时检查数据是否被其他事务修改来判断是否存在冲突14. 在数据库系统中,如何优化查询性能?(ABCD)A. 使用索引(Indexing)B. 使用分区(Partitioning)C. 使用缓存(Caching)D. 使用连接查询(Join Query Optimization)15. 在数据库系统中,如何确保数据的完整性?(ABD)A. 使用约束(Constraints)B. 使用触发器(Triggers)C. 使用存储过程(Stored Procedures)D. 使用事务(Transactions)16. 数据库事务的基本特性包括哪些?A. 原子性B. 一致性C. 隔离性D. 持久性17. 在数据库系统中,如何实现事务的隔离性?A. 使用锁机制B. 使用多版本并发控制(MVCC)C. 使用时间戳排序D. 使用行级锁18. 什么是死锁?如何避免死锁?A. 死锁是指两个或多个事务互相等待对方释放资源的情况B. 避免死锁的方法包括按照固定顺序访问资源、使用锁超时、检测并解决死锁C. 死锁只发生在并发事务中D. 死锁是数据库系统的正常现象19. 什么是事务的持久性?如何确保事务的持久性?A. 持久性是指事务处理结束后,其结果仍然存在于数据库中B. 确保事务持久性的方法是使用日志记录和恢复技术C. 持久性只适用于本地数据库D. 持久性与并发控制无关20. 在数据库系统中,如何处理事务的回滚操作?A. 回滚操作是将事务的所有更改撤销,使数据库回到事务开始前的状态B. 回滚操作通常由用户手动执行C. 回滚操作只在发生错误时才需要D. 回滚操作总是自动执行21. 什么是并发控制?为什么需要并发控制?A. 并发控制是指在多个事务同时运行时,确保它们不会相互干扰的技术B. 并发控制可以防止数据不一致和破坏C. 并发控制只适用于数据库系统D. 并发控制与操作系统性能无关22. 在数据库系统中,如何实现并发控制中的安全性控制?A. 使用访问控制列表(ACL)来限制用户对资源的访问B. 使用加密技术来保护数据的机密性C. 使用时间戳排序来避免冲突D. 使用多版本并发控制(MVCC)来提高并发性能23. 在数据库系统中,如何实现并发控制中的完整性控制?A. 使用约束条件来限制用户的输入B. 使用触发器来强制数据的一致性C. 使用事务来保证数据的一致性D. 使用存储过程来限制用户的操作24. 在数据库系统中,如何实现并发控制中的可靠性控制?A. 使用备份和恢复技术来恢复丢失的数据B. 使用日志记录和恢复技术来保证数据的一致性C. 使用事务的原子性和一致性来保证数据的可靠性D. 使用多副本技术来提高数据的可靠性25. 在数据库系统中,如何实现并发控制中的可用性控制?A. 使用缓存技术来提高查询性能B. 使用负载均衡技术来分配系统资源C. 使用索引优化技术来提高查询速度D. 使用分布式技术来扩展系统容量26. 数据库事务必须具备的特性中,哪个不是?A. 原子性(Atomicity)B. 一致性(Consistency)C. 隔离性(Isolation)D. 持久性(Durability)27. 在数据库系统中,事务的隔离级别由低到高依次是什么?A. 读未提交、读已提交、可重复读、串行化B. 读未提交、读已提交、串行化、可重复读C. 读未提交、读已提交、可重复读、串行化D. 读已提交、读未提交、可重复读、串行化28. 下面哪个不是数据库事务处理的关键要素?A. 隔离性(Isolation)B. 持久性(Durability)C. 原子性(Atomicity)D. 一致性(Consistency)29. 在数据库系统中,实现事务的隔离性需要考虑哪些因素?A. 数据库锁机制B. 数据库索引C. 数据库设计D. 数据库性能30. 什么是事务的ACID属性?请简要解释每个属性的含义。
数据库事务的隔离级别与锁定机制随着互联网的迅猛发展,数据库的应用在各行各业中扮演着越来越重要的角色。
而在数据库中,事务是一个常见的操作单元,它可以保证多个操作的原子性和一致性。
事务的隔离级别与锁定机制是保证事务正确运行的关键因素。
一、事务的隔离级别事务的隔离级别指的是在一个事务中,对其他事务可见的数据范围。
常见的隔离级别包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
1. 读未提交在读未提交的隔离级别下,一个事务可以读取其他未提交事务的数据。
这一级别的隔离级别最低,也是最容易引起问题的。
例如,事务A将一个账户的金额从100元增加到200元,而同时事务B读取了这个账户的金额,得到的结果可能是100元,而不是事务A更新后的200元。
2. 读已提交在读已提交的隔离级别下,一个事务只能读取已经提交的数据。
该级别通过阻塞其他事务的写操作来实现数据的一致性,但可能导致并发性降低。
3. 可重复读在可重复读的隔离级别下,一个事务在执行过程中,读取的数据是事务开始时的一个一致性视图。
事务将在整个过程中保持此一致性视图,因此可以读取事务开始时未提交的数据。
不过,这一级别仍然可能导致幻读的问题,即在同一事务中,重复查询同一范围时发现有新增或删除的数据。
4. 串行化在串行化的隔离级别下,事务是完全串行执行的。
所有的读写操作都会加锁,确保只有一个事务可以访问一个数据项。
这样可以避免幻读的问题,但并发性也是最低的。
二、锁定机制锁定机制是数据库系统用来控制并发事务访问共享资源的方式。
常见的锁定机制包括悲观锁和乐观锁。
1. 悲观锁悲观锁适用于并发写操作较多的环境中,它假定并发访问的操作会导致冲突,因此在使用共享资源之前就会将其锁定,直到释放锁之后其他事务才能访问。
这样可以确保数据的一致性,但仍然可能导致并发性低下和死锁等问题。
事务的特点:
1. 原子性
2. 一致性
3. 隔离性
4. 持久性
事务的隔离级别:
事务的隔离级别定义了事务与事务之间的隔离程度。
1. 读未提交数据(Read uncomitted)
2. 读已提交数据(Read comitted)
3. 可重复读(Repeatable read)
4. 可串行化(Serializable)
隔离级别脏读不可重复读幻读
读未提交数据√√√
读已提交数据×√√
可重复读××√
可串行化×××
首先认识一下,什么叫脏读、不可重复读和幻读?
脏读(dirty read):当一个事务读取另一个事务未提交的数据时,产
生脏读。
不可重复读(nonrepeatable read):同一查询在同一个事务中多次进行,由于其他事务所做的修改或者删除,每次返回不同的结果集,此时发生不可重复读。
幻读(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读。
在Oracle中不会出现脏读。
在Oracle中会出现不可重复读。
Oracle默认的隔离级别为read commited;可以保证Oracle不会出现脏读。
Oracle提供SQL92标准中的read commited和serializable,同时提供了非SQL92标准中的read only;
Serializable:就是使事务看起来像是在一个一个地按顺序执行,仅仅能够看见在本事务开始前由其他事务提交的更改和在本事务中所做
的更改,保证不会出现脏读、不可重复读和幻读。
Read only(只读):Oracle提供的隔离级别,不属于SQL92提供的标准数据库隔离级别,它也可以保证不会出现脏读、不可重复读和幻读。
Serializable和read only 的区别:设置成serializable仍然可以执行增删改查操作,即DML语句,如果设置成read only,则不能够执行增删改操作。
Java中如何设置隔离级别?
Ct.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTE D);
一般情况下,我们的Java程序员不用设置隔离级别,默认设置为读已提交数据。