Oracle学习笔记(事务知识点)第2篇

Oracle学习笔记(事务知识点)第2篇

我就直接po截图和代码了,下面有具体的截图演示事务处理和死锁的情况

/*
Oracle学习笔记(事务知识点)
事务处理:所谓的事务处理其实就是保证数据操作的完整性,所有的操作要
么同时成功,要么同时失败

事务的4个特性:ACID
原子性 Atomicity
一致性 Consistency
隔离性 Isolation
持久性 Durability

事务主要有2个命令
提交 commit
回滚 rollback

在oracle中,对于每一个连接到数据库的窗口(sqlplus)或
者其他第三方软件工具(PLSQL Developer、Navicat Premium),在连接之后,实
际上都会与数据库的连接建立一个session会话(即每一个连接到数据库上的用户都表示创
建了一个session会话)

一个session会话对数据库所做的修改,不会立刻反映到数据库的真实数据上,这是允
许回滚的,当一个session会话提交了所有的操作之后,数据库才真正的做了修改


注意:如果数据被提交了,则肯定无法回滚

在oracle数据库中的事务的隔离级别有read committed 和serializable

在Mysql数据库中事务的隔离级别有read-uncommitted(读未提交)、read-committed(不可重复读)、
repeatable-read(可重复读)、serializable(串行化)这4种


我们在事务中,可以设置保存点,删除保存点,回滚部分事务,回滚全部事务

在oracle数据库中,有一个死锁的概念
比如:多个session会话都在操作同一条记录
死锁:一个session会话如果更新了数据库中的某条记录,此时,其他session会
话也在更新该条记录,那么其他session会话是无法立刻更新的,需要等
待对方commit提交了之后才允许更新

如果两个事务,分别锁定一部分数据,而都在等待对方释放锁才能完成事务操作,这
种情况下就会发生死锁

*/

/*
我使用Navicat Premium这个软件工具,默认是自动提交事务

而我使用PLSQL Developer这个软件工具,默认是不自动提交事务

PL/SQL Developer这个软件工具可以自己设置自动提
交事务,在工具-> 首选项 -> 窗口类型 -> SQL窗口 -> 勾选“自动提交sql”
英语界面:Tools -> Preferences -> Window Types -> SQL Window:勾选“AutoCommit SQL”


在Oracle中可以使用set autocommit on;和set autocommit off;这2个命
令设置是否自动提交事务

但是需要注意:set autocommit off;和set autocommit on;这2句话,在PLSQL Developer这个软
件工具和在Navicat Premium这个软件工具中执行都会报错,但是在sqlPlus窗口中输
入set autocommit off;和set autocommit on;这2句话是OK的,有效的



在Mysql中
1.开启自动提交事务:set autocommit = 1;
2.关闭自动提交事务:set autocommit = 0;
3.查看:show variables like '%autocommit%';

在Oracle中
1.开启自动提交事务:set autocommit on;
2.关闭自动提交事务:set autocommit off;

*/

--查询数据
SELECT * FROM emp;
--删除数据
DELETE FROM emp WHERE empno = 7788;
--查询数据
SELECT * FROM emp;


/*

后面有时间的话,写个事务的具体案例
事务:所谓的事务处理其实就是保证数据操作的完整性,所有的操作要么同时成功,要么同时失败
银行转帐的例子是最经典的事务案例,后面有时间的话,会写写这个案例

*/

在Oracle数据库中,设置是否自动提交事务如下:

set autocommit off; 关闭自动提交事务

set autocommit on; 开启自动提交事务

如下图:在sqlPlus窗口中,使用set autocommit off;和set autocommit on;这2句话是OK的,有效的,但

是这2句话在PLSQL Developer这个软件工具和在Navicat Premium这个软件工具中执行都会报错,大家可以理解成这些第三方软件工具是在sqlPlus的基础上包了一层,所以这些第三方软件工具自然和sqlPlus有些不一样了,意思就是说,这些第三方软件工具在sqlPlus的基础上包了一层之后,有些命令和设置,不让你自己轻易修改和设置了。

下面演示事务处理

DELETE FROM emp WHERE empno = 7698;

执行删除sql语句后,我们再重新查了一下emp表,如下:好像确实删除了编号为7698的这条数据

我们可以再开一个客户端,查看emp表,看看编号为7698的这条数据是否真的删除了,那我们就用PLSQL Developer这个软件工具查emp表吧,可以把PLSQL Developer这个软件工具理解成另一个客户端B如下:

此时,我们在客户端A,提交事务,看下会有什么效果

此时,我们再在PLSQL Developer这个软件工具查看emp表

以上演示的是一个事务处理的小案例

接下来,演示一个死锁的案例

此时,我们把客户端A提交(commit)一下,看下是什么效果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值