oracle创建表,选择,插入,更新,删除,丢弃表,回收站,清除
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创建表,选择,插入,更新,删除,丢弃表,回收站,清除相关推荐
- mysql多表查询插入更新_Mysql多表查询,多表插入和多表更新
/*************************************by garcon1986************************************************* ...
- java实现hbase表创建、数据插入、删除表
近日查看了相关资料后,梳理了一下用java实现hbase的表创建.数据插入.删除表,代码如下: 1.需要的jar包: commons-codec-1.4.jar commons-logging-1.0 ...
- oracle存储过程和视图不存在,Oracle 创建存储过程 提示权限不足或者提示表和视图不存在问题...
grant create view to hospital; --授予查询权限 grant select any table to hospital; --授予权限 grant select any ...
- 顺序表的插入和删除操作
C语言线性表的插入和删除操作 C语言数据结构的学习之线性表的插入与删除操作 C语言线性表的插入和删除操作 一.插入操作 插入操作的时间复杂度分析: 二.删除操作 删除操作的时间复杂度分析: 查找操作 ...
- java中线性表删除元素和删除指定元素_线性表的插入和删除(Java版)
1.线性表的定义: (1).线性表是一种可以在任意位置插入和删除数据元素操作.由n(n≥0)个相同类型数据元素a0, a1,-, an-1组成的线性结构.除了第一个元素没有前驱元素和最后一个元素没有后 ...
- 顺序表的插入与删除java_C++实现顺序表的常用操作(插入删出查找输出)
实现顺序表的插入,删除,查找,输出操作在C语言中经常用到.下面小编给大家整理实现代码,一起看下吧 代码如下所示: #include using namespace std; #define MAXSI ...
- Oracle创建一个用户并赋予其他用户表的访问权限
Oracle创建一个用户并赋予其他用户表的访问权限的方法 --第一步:创建用户 create user username identified by password; --第二步:给用户赋值接触锁定 ...
- 2 顺序表的插入,删除,查找操作(详细)
一 顺序表的结构体定义和函数声明 #include<iostream> using namespace std; #define ElemType int // 自定义 #define ...
- 折半查找和线性表的插入与删除实验
学号 姓名 博客名 2103101018 罗玛 桃花岛-戌时 题目:折半 ...
- 数据表的修改、删除与表中记录的录入
实验4 MySQL数据表的修改.删除与表中记录的录入 目录 实验4 MySQL数据表的修改.删除与表中记录的录入 实验目的: 1.掌握MySQL中数据表结构的修改.删除: 2.掌握MySQL表中记录的 ...
最新文章
- CMOS图像传感器与DDI显示芯片
- 一个HTTP请求的曲折经历
- 数组排序思想———选择排序
- 【Tools】Wireshark3.0安装教程详解
- 2015北京区域赛 Mysterious Antiques in Sackler Museum 几何基础+思维
- es6 dsl与sql对比
- apache ignite_使用Spring Data的Apache Ignite
- 10.32/10.33 rsync通过服务同步 10.34 linux系统日志 screen工具
- 前端学习(2413):关于有默认子路由的路由name
- Spring MVC面试题
- 人工智能python课程总结1500字_李开复的《人工智能》读后感1500字
- micropython中文社区-micropython支持中文啦!
- react-github案例
- mysql 独占查询,MySql历史与架构
- oracle 查询clob
- 国外大牛开发者创造出Siri第三方服务器
- Atitit 锁的不同层级 app锁 vm锁 os锁 硬件锁 目录 1. 在硬件层面,CPU提供了原子操作、关中断、锁内存总线的机制	1 1.1. test and set指令	1 1.2. 锁内
- 问题1:VS2017:找不到 Windows SDK 版本10.0.17134.0
- linux:使用yum安装_首次使用Linux:30个安装案例
- IntelliJ IDEA 官方网站
热门文章
- 在PSP上玩《生化危机1-2-3 / Biohazard 1-2-3 / ResidentEvil 1-2-3》(Update:2007.12.27)
- any在mysql语句中用法_MySQL中,子查询中可以使用运算符ANY,它表示的意思是______。...
- Python打字小游戏《Alphabet Zoo》
- 数据挖掘--统计学模块 05 抽样分布
- [数学] 智机+视觉+机器学习必要的工程数学(应用数学)知识练习与总结 -- 微积分+高等数学
- 阿里云移动推送服务使用教程
- 如何构建成功的微服务架构?带你洞悉微服务构建流程,以实战角度出发,详解微服务架构
- 黄金甲 方文山的词越来越好了
- Java连接其它电脑共享的mdb库(access数据库)
- Cadence16.6 Allegro 快捷键设置 env 放置路径