• Module1

Creating Tables

表是Oracle数据库中数据存储的基本单元。数据按行和列存储。使用表名(如employees)和一组列定义表。为每个列指定一个列名,例如employee_id、last_name和job_id;数据类型,如VARCHAR2、日期或数字;以及宽度。宽度可以由数据类型预先确定,如日期。如果列是数字数据类型,请定义精度和比例而不是宽度。行是对应于单个记录的列信息的集合。

  • 可以为表的每列指定规则。这些规则称为完整性约束。一个例子是非空完整性约束。此约束强制列在每行中包含一个值。
    例如:

    
    create table DEPARTMENTS (  deptno        number,  name          varchar2(50) not null,  location      varchar2(50),  constraint pk_departments primary key (deptno)
    );
    

    表可以是声明性的,指定表之间的关系,通常称为引用完整性。为了了解其工作原理,我们可以通过在引用DEPARTMENTS表的EMPLOYEES表中包含外键来创建DEPARTMENTS表的“子”表。例如:

    
    create table EMPLOYEES (  empno             number,  name              varchar2(50) not null,  job               varchar2(50),  manager           number,  hiredate          date,  salary            number(7,2),  commission        number(7,2),  deptno           number,  constraint pk_employees primary key (empno),  constraint fk_employees_deptno foreign key (deptno) references DEPARTMENTS (deptno)
    );
    

    外键必须引用主键,因此要创建“子”表,“父”表必须具有外键要引用的主键。

  • Module2

    Creating Triggers

    触发器是存储在数据库中的过程,在发生某些事情时隐式运行或触发。传统上,触发器支持过程代码的执行,在Oracle中,过程SQL称为PL/SQL块。PL代表过程语言。在表或视图上发生插入、更新或删除时。触发数据库和架构上的支持系统和其他数据事件。

触发器经常用于自动填充表主键,下面的触发器示例显示了一个示例触发器。我们将使用内            置函数获取全局唯一标识符或GUID。

  • 
    create or replace trigger  DEPARTMENTS_BIUbefore insert or update on DEPARTMENTSfor each row
    beginif inserting and :new.deptno is null then:new.deptno := to_number(sys_guid(), 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');end if;
    end;
    /create or replace trigger EMPLOYEES_BIUbefore insert or update on EMPLOYEESfor each row
    beginif inserting and :new.empno is null then:new.empno := to_number(sys_guid(), 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');end if;
    end;
    /
    
  • Module3

    Inserting Data

    现在我们已经创建了表,并且有了自动填充主键的触发器,我们可以向表中添加数据。因为我们有父子关系,以DEPARTMENTS表为父表,EMPLOYEES表为子表,我们将首先在DEPARTMENTS表中插入一行。

    
    insert into departments (name, location) values('Finance','New York');insert into departments (name, location) values('Development','San Jose');
    

    让我们通过运行SQL SELECT语句查询表中的所有列和所有行来验证插入是否成功。

    
    select * from departments;
    

    您可以看到,将自动生成一个ID。现在可以在EMPLOYEES表中插入新行,但需要将生成的DEPTID值放入SQL insert语句中。下面的示例展示了如何使用SQL查询来实现这一点,但您可以直接输入部门编号。

  • 
    insert into EMPLOYEES (name, job, salary, deptno) values('Sam Smith','Programmer', 5000, (select deptno from departments where name = 'Development'));insert into EMPLOYEES (name, job, salary, deptno) values('Mara Martin','Analyst', 6000, (select deptno from departments where name = 'Finance'));insert into EMPLOYEES (name, job, salary, deptno) values('Yun Yates','Analyst', 5500, (select deptno from departments where name = 'Development'));
    
  • Module4

    Indexing Columns

    通常,开发人员索引列有三个主要原因:
    创建表并指定主键时,将自动创建索引以强制执行主键约束。如果在创建列时为列指定了唯一索引,则也会创建唯一索引。要查看给定表中已经存在的索引,可以运行以下字典查询。

    
    select table_name "Table", index_name "Index", column_name "Column", column_position "Position"
    from  user_ind_columns
    where table_name = 'EMPLOYEES' or table_name = 'DEPARTMENTS'
    order by table_name, column_name, column_position
    

    索引外键通常是一种很好的形式,外键是表中引用另一个表的列。在我们的EMPLOYEES和DEPARTMENTS表示例中,EMPLOYEE表中的DEPTNO列引用DEPARTMENTS表的主键。

    
    create index employee_dept_no_fk_idx
    on employees (deptno)
    

    我们还可以确定EMPLOYEE表将经常通过NAME列进行搜索。为了提高搜索性能并确保唯一性,我们可以在EMPLOYEE表名称列上创建唯一索引。

    
    create unique index employee_ename_idx
    on employees (name)
    

    Oracle提供了许多其他索引技术,包括可以索引表达式的基于函数的索引,如上位函数、可以索引自由格式文本的文本索引,以及在数据仓库中有用的位图索引。您还可以创建索引的组织表,可以使用分区索引等。有时,最好使用较少的索引并利用内存中的功能。所有这些主题都超出了本基本介绍的范围。
    在列中强制执行唯一值的步骤
    为了提高数据访问性能
    在更新使用声明性引用完整性的表行时防止锁升级

  • Module5

    Querying Data

    要从单个表中选择数据相当简单,只需使用select…from…WHERE…ORDER BY…语法即可。

    
    select * from employees;
    

    要查询两个相关表中的数据,可以将数据连接起来

    
    select e.name employee,d.name department,e.job,d.location
    from departments d, employees e
    where d.deptno = e.deptno(+)
    order by e.name;
    

    作为联接的替代方法,您可以使用内联选择查询数据。

    
    select e.name employee,(select name from departments d where d.deptno = e.deptno) department,e.job
    from employees e
    order by e.name;
    
  • Module6

    Adding Columns

    使用ALTER table…add…语法创建表后,可以添加其他列。例如:

    
    alter table EMPLOYEES
    add country_code varchar2(2);
    
  • Module7

    Querying the Oracle Data Dictionary

    可以从Oracle数据字典访问表元数据。以下查询显示了如何查询数据字典表。

    
    select table_name, tablespace_name, status
    from user_tables
    where table_Name = 'EMPLOYEES';select column_id, column_name , data_type
    from user_tab_columns
    where table_Name = 'EMPLOYEES'
    order by column_id;
    

  • Module8

    Updating Data

    您可以使用SQL更新表中的值,为此,我们将使用update子句

    
    update employees
    set country_code = 'US';
    

    您可以使用SQL更新表中的值,为此,我们将使用更新子句上述查询将更新employee表的所有行,并将国家代码的值设置为我们。您还可以选择性地仅更新特定行。

    
    update employees
    set commission = 2000
    where  name = 'Sam Smith';
    

    让我们运行一个查询,看看我们的数据是什么样子

    
    select name, country_code, salary, commission
    from employees
    order by name;
    
  • Module9

    Aggregate Queries

    可以使用聚合函数对表中的数据求和。为了可读性,我们将使用列别名来重命名列,我们还将使用空值函数(NVL)来允许我们对具有空值的列进行正确求和。

    
    select count(*) employee_count,sum(salary) total_salary,sum(commission) total_commission,min(salary + nvl(commission,0)) min_compensation,max(salary + nvl(commission,0)) max_compensation
    from employees;
    
  • Module10

    Compressing Data

    随着数据库的大小增长到GB或TB以上,请考虑使用表压缩。表压缩节省了磁盘空间并减少了缓冲区缓存中的内存使用。表压缩还可以加快读取期间的查询执行。然而,数据加载和DML的CPU开销是有成本的。表压缩对应用程序完全透明。它在在线分析处理(OLAP)系统中特别有用,因为在该系统中存在冗长的只读操作,但也可以用于在线事务处理(OLTP)系统。您可以使用CREATE table语句的COMPRESS子句指定表压缩。通过在ALTER table语句中使用此子句,可以对现有表启用压缩。在这种情况下,唯一被压缩的数据是启用压缩后插入或更新的数据。类似地,可以使用ALTER table…NOCOMPRESS语句禁用现有压缩表的表压缩。在这种情况下,所有已经压缩的数据都将保持压缩状态,新数据将以未压缩状态插入。

  • 要为将来的数据启用压缩,请使用以下语法。

    
    alter table EMPLOYEES compress for oltp;
    alter table DEPARTMENTS compress for oltp;
    
  • Module11

    Deleting Data

    可以使用delete语法从表中删除一行或多行。例如,要删除特定行:

    
    delete from employees
    where name = 'Sam Smith';
    
  • Module12

    Dropping Tables

    可以使用SQLDROP命令删除表。删除表将删除所有行并删除子对象,包括索引和触发器。以下DROP语句将删除departments和employees表。可选的cascade constraints子句将删除约束,从而允许您以任何顺序删除数据库表。

    
    drop table departments cascade constraints;
    drop table employees cascade constraints;
    
  • Module13

    Un-dropping Tables

    如果RECYCLEBIN初始化参数设置为ON(10g中的默认值),则删除此表将其放入回收站。要查看是否可以取消删除表,请运行以下数据字典查询:

    
    select object_name, original_name, type, can_undrop, can_purge
    from recyclebin;
    

    要取消删除表,我们使用flashback命令,例如:

    
    flashback table DEPARTMENTS to before drop;
    flashback table EMPLOYEES to before drop;
    select count(*) departments
    from departments;
    select count(*) employees
    from employees;

oracle创建表,选择,插入,更新,删除,丢弃表,回收站,清除相关推荐

  1. mysql多表查询插入更新_Mysql多表查询,多表插入和多表更新

    /*************************************by garcon1986************************************************* ...

  2. java实现hbase表创建、数据插入、删除表

    近日查看了相关资料后,梳理了一下用java实现hbase的表创建.数据插入.删除表,代码如下: 1.需要的jar包: commons-codec-1.4.jar commons-logging-1.0 ...

  3. oracle存储过程和视图不存在,Oracle 创建存储过程 提示权限不足或者提示表和视图不存在问题...

    grant create view to hospital; --授予查询权限 grant select any table to hospital; --授予权限 grant select any ...

  4. 顺序表的插入和删除操作

    C语言线性表的插入和删除操作 C语言数据结构的学习之线性表的插入与删除操作 C语言线性表的插入和删除操作 一.插入操作 插入操作的时间复杂度分析: 二.删除操作 删除操作的时间复杂度分析: 查找操作 ...

  5. java中线性表删除元素和删除指定元素_线性表的插入和删除(Java版)

    1.线性表的定义: (1).线性表是一种可以在任意位置插入和删除数据元素操作.由n(n≥0)个相同类型数据元素a0, a1,-, an-1组成的线性结构.除了第一个元素没有前驱元素和最后一个元素没有后 ...

  6. 顺序表的插入与删除java_C++实现顺序表的常用操作(插入删出查找输出)

    实现顺序表的插入,删除,查找,输出操作在C语言中经常用到.下面小编给大家整理实现代码,一起看下吧 代码如下所示: #include using namespace std; #define MAXSI ...

  7. Oracle创建一个用户并赋予其他用户表的访问权限

    Oracle创建一个用户并赋予其他用户表的访问权限的方法 --第一步:创建用户 create user username identified by password; --第二步:给用户赋值接触锁定 ...

  8. 2 顺序表的插入,删除,查找操作(详细)

    一 顺序表的结构体定义和函数声明 #include<iostream> using namespace std; #define ElemType int  // 自定义 #define ...

  9. 折半查找和线性表的插入与删除实验

    学号                     姓名                   博客名 2103101018         罗玛                   桃花岛-戌时 题目:折半 ...

  10. 数据表的修改、删除与表中记录的录入

    实验4 MySQL数据表的修改.删除与表中记录的录入 目录 实验4 MySQL数据表的修改.删除与表中记录的录入 实验目的: 1.掌握MySQL中数据表结构的修改.删除: 2.掌握MySQL表中记录的 ...

最新文章

  1. CMOS图像传感器与DDI显示芯片
  2. 一个HTTP请求的曲折经历
  3. 数组排序思想———选择排序
  4. 【Tools】Wireshark3.0安装教程详解
  5. 2015北京区域赛 Mysterious Antiques in Sackler Museum 几何基础+思维
  6. es6 dsl与sql对比
  7. apache ignite_使用Spring Data的Apache Ignite
  8. 10.32/10.33 rsync通过服务同步 10.34 linux系统日志 screen工具
  9. 前端学习(2413):关于有默认子路由的路由name
  10. Spring MVC面试题
  11. 人工智能python课程总结1500字_李开复的《人工智能》读后感1500字
  12. micropython中文社区-micropython支持中文啦!
  13. react-github案例
  14. mysql 独占查询,MySql历史与架构
  15. oracle 查询clob
  16. 国外大牛开发者创造出Siri第三方服务器
  17. Atitit 锁的不同层级 app锁 vm锁 os锁 硬件锁 目录 1. 在硬件层面,CPU提供了原子操作、关中断、锁内存总线的机制 1 1.1. test and set指令 1 1.2. 锁内
  18. 问题1:VS2017:找不到 Windows SDK 版本10.0.17134.0
  19. linux:使用yum安装_首次使用Linux:30个安装案例
  20. IntelliJ IDEA 官方网站

热门文章

  1. 在PSP上玩《生化危机1-2-3 / Biohazard 1-2-3 / ResidentEvil 1-2-3》(Update:2007.12.27)
  2. any在mysql语句中用法_MySQL中,子查询中可以使用运算符ANY,它表示的意思是______。...
  3. Python打字小游戏《Alphabet Zoo》
  4. 数据挖掘--统计学模块 05 抽样分布
  5. [数学] 智机+视觉+机器学习必要的工程数学(应用数学)知识练习与总结 -- 微积分+高等数学
  6. 阿里云移动推送服务使用教程
  7. 如何构建成功的微服务架构?带你洞悉微服务构建流程,以实战角度出发,详解微服务架构
  8. 黄金甲 方文山的词越来越好了
  9. Java连接其它电脑共享的mdb库(access数据库)
  10. Cadence16.6 Allegro 快捷键设置 env 放置路径