数据库操作语句:

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 触发器 删除操作时再查询本表数据 功能不正确

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

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

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

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

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

  6. django基础之数据库操作

    Django 自称是“最适合开发有限期的完美WEB框架”.本文参考<Django web开发指南>,快速搭建一个blog 出来,在中间涉及诸多知识点,这里不会详细说明,如果你是第一次接触D ...

  7. python学习之老男孩python全栈第九期_数据库day004知识点总结 —— MySQL数据库day4

    复习: 1. MySQL:文件管理的软件 2. 三部分: - 服务端 - SQL语句 - 客户端 3. 客户端: - MySQL - navicat 4. 授权操作: - 用户操作 - 授权操作 5. ...

  8. mysql数据库操作语句整合

    查看版本:select version();显示当前时间:select now(); 注意:在语句结尾要使用分号; 远程连接 一般在公司开发中,可能会将数据库统一搭建在一台服务器上,所有开发人员共用一 ...

  9. flask 数据库操作(增删改查)

    数据库操作 现在我们创建了模型,生成了数据库和表,下面来学习常用的数据库操作,数据库操作主要是CRUD,即Create(创建).Read(读取/查询).Update(更新)和Delete(删除). S ...

  10. Android之数据库操作

    安卓数据库帮助类 /** * 数据库帮助类,用于管理数据库 * @author Administrator * */ public class PersonSQLiteOpenHelper exten ...

随机推荐

  1. Android Activity 常用技巧

    1.设置 Activity 背景色为透明 在style.xml里面声明: <style name="TranslucentActivityStyle" parent=&quo ...

  2. ajax入门详解

    l 一个实例 在开始正式讲解 Ajax之前,首先让我们先来看看Google Map使用Ajax改善其产品设计的效果. 1. 在浏览器地址栏中输入http://maps.google.com打开Goog ...

  3. Excel Sheet Column Number || leetcode

    很简单的26进制问题 int titleToNumber(char* s) { int sum=0,temp; char *p=s; while(*p!='\0'){ sum=sum*26+(*p-' ...

  4. 深度实践KVM笔记

    深度实践KVM笔记 libvirt(virt-install,API,服务,virsh)->qemu(qemu-kvm进程,qemu-img)->KVM虚拟机->kvm.ko 内核模 ...

  5. vijos 1053Easy sssp

    P1053Easy sssp Accepted 标签:图结构 最短路     描述 输入数据给出一个有N(2 <= N <= 1,000)个节点,M(M <= 100,000)条边的 ...

  6. jQuery常用事件

    1.$(document).ready() $(document).ready()是jQuery中响应JavaScript内置的onload事件并执行任务的一种典型方式.它和onload具有类似的效果 ...

  7. opencv 边缘羽化,边缘过渡

    原地址:http://blog.csdn.net/sogarme/article/details/12942971 当把前景和背景分开时,黑色代表背景,白色代表前景,如下图1—记作img1 为了平滑过 ...

  8. POJ 3177 Redundant Paths POJ 3352 Road Construction(双连接)

    POJ 3177 Redundant Paths POJ 3352 Road Construction 题目链接 题意:两题一样的.一份代码能交.给定一个连通无向图,问加几条边能使得图变成一个双连通图 ...

  9. 解决HTML导出Excel表数字变成科学计数法

    - js 中导出excel 较长数字串会变成科学计数法 在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串转 ...

  10. 关于extjs表单布局的几种方式

    一.用column布局 layout:'column', defaults:{ style:'float:left;margin:4px;', columnWidth: 0.49, msgTarget ...