事务

show variables like’%commit%’; 查询提交属性
set autocommit = off; 设置自动提交关闭
start transaction; 开启事务
rollback; 回滚事务
commit; 提交事务

代码中通过conn.setAutoCommit(false); 关闭自动提交的设置。
通过conn.commit(); 提交事务
通过conn.rollback(); 回滚事务

事务的特性(ACID):
原子性:事务中包含的逻辑不可分割
一致性:事务执行前后整体数据的完整
隔离性:事务执行期间不受其他事务的影响
持久性:事务执行成功,数据永久保存到磁盘

事务的安全隐患:
1.关于读的方面:
脏读-----一个事务读到了另一个事务还未提交的数据。
不可重复读------一个事务读到了另一个事务提交的数据,造成前后两次读取的数据不一致。
幻读-------一个事务读到了另一个insert的数据,造成前后查询结果不一致。
2.关于写的方面:
丢失更新------一个事务提交造成另一个事务修改的信息被覆盖,或者是因为事务的回滚造成另一个事务修改的信息被覆盖。

事务的隔离级别
1.Read Uncommitted 读未提交
2.Read Committed 读已提交
3.Repeatable Read 重复读
4.Serializable 可串行化

mysql的隔离级别是 可重复读
oracle的隔离级别是 读已提交

按效率来说,由高到低:
读未提交》读已提交》重复读》可串行化
按照拦截程度,由高到低:
可串行化》重复读》读已提交》读未提交

可串行化:如果有一个连接的隔开级别设置为串行化,那么谁先打开了事务,谁就有了先执行的权力,谁后打开事务,谁就只能等着,等前面的那个事务提交或者回滚后,才能继续执行。但是这种隔离级别一般比较少用,容易造成性能上的问题,效率比较低。

查看隔离级别
select @@tx_isolation;
设置当前会话 读未提交
set session transaction isolation level read uncommitted;

悲观锁:一定会发生丢失更新
例子:select * from account for update;
for update就是数据库锁机制,排它锁。加上他之后,A事务在进行查询时,B事务会卡住。
乐观锁:一定不会发生丢失更新
例子:程序员自己给每条数据添加一条属性,A事务提交,属性发生改变。当B事务准备提交时,对比数据库的这个属性和自身的属性是否一致,不一致不允许提交,让其先更新数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值