Oracle基础:数据库操作_数据库事务_表的锁定
数据库操作语句:

INSERT INTO 表名[(字段列表)] VALUES ( 表达式列表);
例子:INSERT INTO emp(empno,ename,job,hiredate) VALUES (1001, '小马', 'CLERK', to_date('2004-11-27','yyyy-mm-dd'));
INSERT INTO 表名(字段列表) SELECT(字段名1, 字段名2, ...) FROM 另外的表名;
例子:INSERT INTO manager SELECT empno, ename, sal,job FROM emp WHERE job = 'CLERK';
修改数据的语句UPDATE对表中指定字段的数据进行修改,一般需要通过添加WHERE条件来限定要进行修改的行,如果不添加WHERE条件,将对所有的行进行修改。 (1) 修改数据的语句UPDATE的基本语法如下: UPDATE 表名 SET 字段名1=表达式1, 字段名2=表达式2, ... WHERE 条件;
本例中不能省略WHERE条件,否则将会修改表的所有行。
UPDATE 表名 SET(字段名1, 字段名2, ...)=SELECT (字段名1, 字段名2, ...) FROM 另外的表名WHERE条件;
例子:UPDATE manager SET (ename, sal) =(SELECT ename,sal FROM emp WHERE empno = 7788) WHERE empno = 2000;
删除数据的基本语法如下: DELETE FROM 表名 WHERE 条件; 要从表中删除满足条件的记录,WHERE条件一般不能省略,如果省略就会删除表的全部数据。
删除记录并不能释放Oracle中被占用的数据块表空间,它只是把那些被删除的数据块标成unused。
DELETE FROM emp WHERE empno=1000;
如果确实要删除一个大表里的全部记录,可以用TRUNCATE 命令,它可以释放占用的数据块表空间,语法为: TRUNCATE TABLE 表名;
删除重复记录
方法原理:
1、Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的, rowid确定了每条记录是在ORACLE中的哪一个数据文件、块、行上。
2、在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中 那些具有最大rowid的就可以了,其余全部删除。
彻底删除manager表的内容。
执行以下的命令: TRUNCATE TABLE manager;
执行结果: 表已截掉。
说明:此命令和不带WHERE条件的DELETE语句功能类似,不同的是,DELETE命令进行的删除可以撤销,但此命令进行的删除不可撤销。
注意:TRUNCATE TABLE命令用来删除表的全部数据而不是删除表,表依旧存在。数据不能恢复,不用commit,不能rollback;
数据库事务
事务的特征:ACID
原子性(Atomicity) : 数据库中的事务执行是作为原子,不可再分,整个语句要么执行,要么不执行
一致性(Consistency) : 在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏(如外键、not null)
理解隔离性(Isolation) : 事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据
理解持久性(Durability) : 在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚
Oracle的事务控制:
Dirty read: 脏读意味着一个事务读取了另一个事务未提交的数据
Phantom read: 幻读,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。如果第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样
Unrepeatable Read :不可重复读,即一个事务范围内两个相同的查询却返回了不同数据
Lost update: 丢失更新,即两个并发的事务,后提交的事务把先提交事务的修改结果覆盖了
Oracle的事务控制:
Read uncommited :性能最佳,但允许出现脏读
Read commited : 不允许脏读,可能出现不可重复读,幻读
Repeatable Read: 可以重复读,没有脏读,可能出现幻读
Serializable: 性能最差,但安全性最高 Oracle默认的事务级别为read commited
数据库事务的应用
数据库事务处理可分为隐式和显式两种。
显式事务操作通过命令实现,隐式事务由系统自动完成提交或撤销(回退)工作,无需用户的干预。
隐式提交的情况包括:当用户正常退出SQL*Plus或执行CREATE、DROP、GRANT、REVOKE等命令时会发生事务的自动提交。
还有一种情况,如果把系统的环境变量AUTOCOMMIT设置为ON(默认状态为OFF),则每当执行一条INSERT、DELETE或UPDATE命令对数据进行修改后,就会马上自动提交。
设置命令格式如下:
SET AUTOCOMMIT ON/OFF
隐式回退的情况包括:当异常结束SQL*Plus或系统故障发生时,会发生事务的自动回退。

表的锁定:
隐式锁和显式锁
在Oracle数据库中,修改数据操作时需要一个隐式的独占锁,以锁定修改的行,直到修改被提交或撤销为止。 如果一个会话锁定了数据,那么第二个会话要想对数据进行修改,只能等到第一个会话对修改使用COMMIT命令进行提交或使用ROLLBACK命令进行回滚撤销后,才开始执行。
默认是隐式加锁,主动锁定行或表,防止其他会话对数据的修改

锁定行:
SELECT * FROM emp WHERE deptno=10 FOR UPDATE;
锁定表:
LOCK语句用于对整张表进行锁定。
语法如下: LOCK TABLE 表名 IN {SHARE|EXCLUSIVE} MODE 对表的锁定可以是共享(SHARE)或独占(EXCLUSIVE)模式。共享模式下,其他会话可以加共享锁,但不能加独占锁。在独占模式下,其他会话不能加共享或独占锁。
乐观锁和悲观锁
悲观锁(Pessimistic Locking):在整个数据处理过程中,采取保守态度,将数据全部处于锁定 状态(不允许修改、删除) 如: SELECT * FROM emp WHERE deptno=10 FOR UPDATE; (只允许查询,不允许修改和删除锁定的数据)
乐观锁( Optimistic Locking ):乐观假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。 乐观锁通常采用检查version、时间戳、关键数据等方式 select ver from emp where empno=7782; update emp set sal =1909,ver=ver+1 where empno=7782 and ver=20; 由于悲观锁在并发环境中影响性能,建议尽量使用乐观锁!
Oracle基础:数据库操作_数据库事务_表的锁定的更多相关文章
- oracle 异常关闭操作 导致数据库无法正常关闭 也无法启动
场景描述: 在关闭数据库的时候,命令没有打全,导致数据库没有正常关闭 解决办法: 重新建立个连接,然后切换到oracle用户 执行强制关闭数据库: OK 问题解决,不过生产环境 还是不推荐 shutd ...
- 传智播客JavaWeb day09-mysql入门、数据库操作、数据库表操作、数据行操作
不知不觉已到了第九天了,今天主要讲了关系数据库的基本概述.安装.数据库.表和数据行的操作 1. 基本概述 1.1 数据库就是用来存储数据的.早期是存在文件里面的操作起来效率低而且不是很安全. 1.2 ...
- Oracle基础命令操作总结
第1章 oracle命令集 1.1 重启数据库 1.1.1 启动数据库 su -root 切换到oracle安装用户下,我的是root source .bash_pro ...
- 多测师讲解自动化测试 _RF数据库操作(上)_高级讲师肖sir
一.安装库 1.查看数据库是否按安装 1.1 DatabaseLibrary pip3 install mysqlclient-2.0.1-cp37-cp37m-win_amd64.whl dos ...
- python数据库操作-mysql数据库
一:连接 1:本地连接 mysql -u用户名 -p密码 2:连接远程服务器 mysql -u用户名 -p密码 -hip地址 -P端口号 线下修改远程服务端上部署的mysql服务器 二:创建数 ...
- c# 数据库操作,多数据库操作、数据库操作异常报错等问题
1.引入相关的命名空间 在C#中要操作数据库,一般情况需要引入两个命名空间,在三种连接模式中都要引入下面的命名空间: System.Data;描述与数据源连接的当前状态. // // 摘要: // 连 ...
- Oracle 触发器 删除操作时再查询本表数据 功能不正确
背影如下: 表名,WFGTEST create table WFGTEST ( NAME1 ) not null, NAME2 ), CAPACITY ,) ) 表结构如下: NAME1 NAME2 ...
- CI数据库操作_查询构造器类
=================数据库操作======================1.数据库配置: config/database.php 用户名 密码 数据库 2 加载数据库类:$this-& ...
- 一个基于PDO的数据库操作类(新) 一个PDO事务实例
<?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ...
随机推荐
- 阿里terway源码分析
背景 随着公司业务的发展,底层容器环境也需要在各个区域部署,实现多云架构, 使用各个云厂商提供的CNI插件是k8s多云环境下网络架构的一种高效的解法.我们在阿里云的方案中,便用到了阿里云提供的CNI插 ...
- 洛谷P2051 [AHOI2009] 中国象棋(状压dp)
题目简介 n*m的棋盘,对每行放炮,要求每行每列炮数<=2,求方案数%9999973 N,M<=100 题目分析 算法考虑 考虑到N,M范围较小,每一行状态只与前面的行状态有关,考虑状压D ...
- 经验分享:程序员如何快速定位问题(BUG)
让我掉下眼泪的 不止内存泄漏 让我夜夜不眠的 不止你的需求 明天还要改多久 你攥着我的手 让我感到为难的 是善变的需求 发布总是在半夜 回滚是永远的愁 错误(Bug)随时的暴漏 困扰着我心头 作为程序 ...
- [BZOJ1965][AHOI2005] 洗牌 - 扩展欧几里得
题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打 ...
- 关于_GNU_SOURCE宏
是在features.h中用于特性控制的一个功能测试宏 /user/include/features.h /* If _GNU_SOURCE was defined by the user, turn ...
- linux文档、目录相关
linux中常用文档的目录规则: /var 存放经常变化的文件 /home 普通用户家目录 /home/xiaoliu 小刘同学的用户家目录 /etc 存放配置文件的目录 /etc/my.cnf my ...
- Etcd安装和使用
Etcd安装和使用 一.安装 1.1 二进制安装 从这里下载: etcd-v3.2.11-linux-amd64.tar.gz 下载包后解压即可运行: # 解压 tar zxvf etcd-v3.2. ...
- Rust入坑指南:千人千构
坑越来越深了,在坑里的同学让我看到你们的双手! 前面我们聊过了Rust最基本的几种数据类型.不知道你还记不记得,如果不记得可以先复习一下.上一个坑挖好以后,有同学私信我说坑太深了,下来的时候差点崴了脚 ...
- 双系统开机引导菜单修复方法 进win7无须重启|metro引导|双系统菜单名字修改
此文转自互联网,一部分是原创. 主要内容 1.修复双系统菜单(win7与win8双系统),进入win7不再需要重启,普通菜单样式(普通引导,非metro界面),更加简洁,实用,开机即可选择操作系统 2 ...
- (三)Kinect姿势识别
Kinect给我们内置了许多姿势如举手等,具体可参考枚举KinectGestures.Gestures,也可以通过Kinect姿势管理器,自定义姿势导入(坑较多,内置的基本够用了)也可以根据关节坐标自 ...