数据库操作语句:

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基础:数据库操作_数据库事务_表的锁定的更多相关文章

  1. oracle 异常关闭操作 导致数据库无法正常关闭 也无法启动

    场景描述: 在关闭数据库的时候,命令没有打全,导致数据库没有正常关闭 解决办法: 重新建立个连接,然后切换到oracle用户 执行强制关闭数据库: OK 问题解决,不过生产环境 还是不推荐 shutd ...

  2. 传智播客JavaWeb day09-mysql入门、数据库操作、数据库表操作、数据行操作

    不知不觉已到了第九天了,今天主要讲了关系数据库的基本概述.安装.数据库.表和数据行的操作 1. 基本概述 1.1 数据库就是用来存储数据的.早期是存在文件里面的操作起来效率低而且不是很安全. 1.2 ...

  3. Oracle基础命令操作总结

    第1章 oracle命令集 1.1 重启数据库 1.1.1 启动数据库 su -root                 切换到oracle安装用户下,我的是root source .bash_pro ...

  4. 多测师讲解自动化测试 _RF数据库操作(上)_高级讲师肖sir

    一.安装库 1.查看数据库是否按安装 1.1 DatabaseLibrary pip3 install mysqlclient-2.0.1-cp37-cp37m-win_amd64.whl dos  ...

  5. python数据库操作-mysql数据库

    一:连接 1:本地连接 mysql -u用户名 -p密码 2:连接远程服务器 mysql -u用户名 -p密码 -hip地址 -P端口号     线下修改远程服务端上部署的mysql服务器 二:创建数 ...

  6. c# 数据库操作,多数据库操作、数据库操作异常报错等问题

    1.引入相关的命名空间 在C#中要操作数据库,一般情况需要引入两个命名空间,在三种连接模式中都要引入下面的命名空间: System.Data;描述与数据源连接的当前状态. // // 摘要: // 连 ...

  7. Oracle 触发器 删除操作时再查询本表数据 功能不正确

    背影如下: 表名,WFGTEST create table WFGTEST ( NAME1 ) not null, NAME2 ), CAPACITY ,) ) 表结构如下: NAME1 NAME2 ...

  8. CI数据库操作_查询构造器类

    =================数据库操作======================1.数据库配置: config/database.php 用户名 密码 数据库 2 加载数据库类:$this-& ...

  9. 一个基于PDO的数据库操作类(新) 一个PDO事务实例

    <?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ...

随机推荐

  1. windows显示文件后缀名

    win+E 进入到计算机 点击组织 点击文件夹和搜索选项 先点击查看,然后去掉勾选隐藏已知文件类型的扩展名

  2. Debian更新源加安装Metespolit&&Cobalt Strike

    首先更新下源 修改/etc/apt/sources.list文件 再apt-get update deb http://mirrors..com/debian/ stretch main non-fr ...

  3. The Mininum Function Value (luoguP2085 最小函数值)

    Background\text{Background}Background 1. CSDN's been upgraded today. There's one MORE ad for each pa ...

  4. 工厂模式在mvc模型中的应用

    在web开发中我们常用mvc模式进行web应用的开发 当应用进入service 层的时候我们根据不同的业务多逻辑进行处理 当有数据进入controller的时候 public class Virtua ...

  5. django-Views之装饰器(四)

    1.选择支持的请求方式 from django.views.decorators.http import require_http_methods from django.shortcuts impo ...

  6. axio安装及使用

    先安装 npm install axios --save 再导入 import $ from "jquery"; import axios from "axios&quo ...

  7. Ubuntu编译安装nginx以及配置自动启动

    本文主要介绍ubuntu如何编译安装nginx以及遇到的问题 和 配置系统自动启动服务 查看操作系统版本 cat /etc/issue  Ubuntu 18.04.3 LTS \n \l    更改镜 ...

  8. Spring中@Resource注解报错

    描述:Spring框架中,@Resource注解报错,在书写时没有自动提示 解决方法:因为maven配置文件的pom.xml文件中缺少javax.annotation的依赖,在pom.项目路中加入依赖 ...

  9. 学 Python (Learn Python The Hard Way)

    学 Python (Learn Python The Hard Way) Contents: 译者前言 前言:笨办法更简单 习题 0: 准备工作 习题 1: 第一个程序 习题 2: 注释和井号 习题 ...

  10. Flutter学习笔记--Dart基础

    前言 Flutter使用Dart语言开发, Dart是面向对象编程语言, 由Google2011年推出, 目前最新版本是2.4.0. 工欲善其事,必先利其器. 为了更好的开发Flutter应用, 我们 ...