事务的特性(ACID)与隔离级别

开发工具与关键技术:eclipse/事务
作者:杨先金
撰写时间:2020年1月18日

事务的特性
1、原子性(Atomicity):指事务是不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
2、一致性(Consistency):事务前后数据的完整性必须保持一致。
3、隔离性(Isolation):指多个用户并发访问数据时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要互相隔离。
4、持久性(Durability):指一个事务一旦被提交,它对数据库中数据的改变是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
事务的隔离级别
一、事务隔离级别:
1、脏读:一个事务读取到另一个事务为提交数据。
2、不可重复读:两次读取数据不一致(读题交数据)—Update
3、虚读:两次读取数据不一致(读提交数据)—Insert
二、事务的隔离级别有哪些?
(1)、Serializable(它会锁表):可避免脏读、不可重复读、虚读情况的发生。(串行化)
(2)、Repeatable read:可避免脏读、不可重复读情况的发生。(可重复读)不可避免虚读
(3)、Read committed:可避免脏读情况发生(读已提交)
(4)、Read uncommitted:最低级别,以上情况均无法保证。(读未提交)
三、在jdbc中设置事务隔离级别
使用java.sql.Connection接口中提供的方法:
void setTransactionIsolation(int level)throws SQLException{}
参数level可以取以下值:
level - 以下Connection常量之一:
Connection.TRANSACTION_READ_UMCOMMITTED、
Connection.TRANSACTION_READ_COMMITTED、
Connection.TRANSACTION_REPEATABLE_READ、
Connection.TRANSACTION_SERIALIZABLE。
(注意,不能使用Connection.TRANSACTION_NONE,因为它指定了不受支持的事务)

丢失更新解决法案
丢失更新指的是多个事务同时对一条数据进行操作导致的数据丢失(后提交的数据把先提交的数据覆盖掉)
1、悲观锁
共享锁:Locke in share mode(加在SQL语句后)
select * from table Locke in share mode(读锁、共享锁)
排他锁:for update(加在SQL语句后,update语句默认是排他锁)
select * from table for update(写锁、排他锁)
------update语句默认添加排他锁
2、乐观锁
乐观锁(假设丢失更新不会发生)————采用程序中添加版本字段解决丢失更新问题
create table product(
int id,
name varchar(20),
updatetime timestamp
);
Insert into product values(1,”冰箱”,null);
Update product set name = ”洗衣机” where id = 1;

解决丢失更新:在数据表添加版本字段,每次修改过记录后,版本字段都会更新,如果读取是版本字段,与修改时版本字段不一致,说明别人修改过数据(重改)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值