创建表格式 Schema
所有者标识
CREATE TABLE [schema.]table (column datatype [DEFAULT expr] [ column_constraint ], ?? [table_constraint ]); Table Column Datatype
列表名 列名
列的数据类型 列约束 表约束
Column_constraint Table_constraint 例:
CREATE TABLE s_dept (id NUMBER(7) CONSTRAINT s_dept_id_pk PRIMARY KEY, Name VARCHAR2(25) CONSTRAINT s_dept_name_nn NOT NULL, Region_id NUMBER(7) CONSTRAINT s_dept_region_id_fk REFERENCES S_region (id), CONSTRAINT s_dept_name_region_id_uk UNIQUE (name, region_id)); 很多时候,数据库表的设计都可以通过表的示例图来设计,通过先创建数据表的示例图,再来创写数据表的角本,这是一种非常有效的方式,如下: 例:通过如下数据表的示例图,创建数据表t_emp: Column Name Key Type Nulls/Unique FK Table FK Column Datetype Length
ID Last_Name NN Userid Start_date Commission_pct Dept_ID PK NN,U NN,U FK ID Num 7 Char 25 Char 8 Date Num 6 Num 7
18
Company Confidential - For internal use only
创建序列格式
CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUEn|NOMAXVALUE}] [{MINVALUEn|NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}] 说明: 标示 Sequence INCREMENT BY START WITH n MAXVALUE n NOMAXVALUE MINVALUE n NOMINVALUE CYCLE|NOCYCLE 说明 建立的序列名 序列数字间的间隔,缺省为1 第一个序列值,缺生为1 序列的最大值 确定序列的最大值,为10的27次方 序列的最小值 确定序列的最小值,为1 确定序列值达到最大值时,是否重复开始,缺省为NOCYCEL 确定数据库管理器于值和存储的值的个数,缺省为NOCACHE CACHE n|NO CACHE
序列常用来给一个表的PK列赋值 序列有NEXTVAL和CURRVAL方法。 例:
CREATE SEQUENCE t_item_s
Increment by 1 Start wih 1 Maxvalue 999999 Nocache Nocycle;
是运行如下命令,看看结果:
19
Company Confidential - For internal use only
select t_item_s.nextval from dual; select t_item_s.currval from dual; 创建视图
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[,alias]?)] AS subsequery [WITH CHECK OPTION [constraint]] [WITH READ ONLY] 注:
I. Subquery可以是非常复杂的select语句 II. Subquery不能包含ORDER BY语句
实际上,视图是一个基于数据表或其他视图的逻辑数据表,一个视图本身并不包含数据,仅仅是一个可以用来查看数据或更新的窗口,一个视图在数据字典中是以一个select语句存储的。 使用视图有着许多优点:
i.
限制数据表的访问:由于它是一条select语句,通过选择的取舍,使用户只能看到或只需看到所要检索的数据列;
允许用户通过一个视图检索多个表的信息,而不要去写复杂的SQL语句;
ii.
创建索引 I.
自动创建
在创建表时,若包含Primary Key或者其他唯一约束时,一个唯一索引就自动创建立了。 II.
手动创建
用户可以创建非唯一的索引来提高检索速度。
CREATE INDEX index ON table (column[, column]?); III.
何时建立索引:
列经常在where或连接中使用; 列包含了一个大范围的值; 列包含了大量的空值;
两个或多个列常常在where或连接中一起被使用; 表的数据量大,而常常检索其中的2-4%;
20
Company Confidential - For internal use only
太多的索引并不总是能提高检索速度。 表空间的概念:
Oralce把文件作为其组织系统的一部分,但是它的逻辑结构已超出文件的概念。一个表空间就是一片磁盘区域,它有一个或多个磁盘文件组成。一个表空间可以容纳许多表、索引或是试图等等。由于表空间的大小是固定的,所以在向表中间增加行时,可能装满整个表空间。可以由拥有DBA权限的用户或是自动扩展这个表空间,其过程是先创建一个磁盘文件,然后将此文件增加到表空间中,或是直接扩大已存在的数据文件,因此,这些表中的行就会分布于两个文件中。一个或多个表空间一起就构成了数据库。
每一个数据库均包含一个系统表空间,这里保存业者的记录和地址,它包含数据字典、数据库的表空间、表、索引的名称和地址。 下面是一个创建表空间的示例:
create table space usertemp datafile ?HOME.ONE‘ size 1000k default storage (initial 25k next 10k) minextents 1 maxextent 100
pctincrease 0)
permanent;
LESSON 3Oracle数据字典
Oracle数据字典是Oracle数据库管理系统的重要组件之一,它包含一系列数据表和数据视图,提供只读属性的数据库信息。
Oracle数据字典实在数据库建立的时候建立的,又Oracle数据库管理器进行更新和维护,提供Oracle数据库用户、各个用户的权限、数据库对象、数据表约束等等信息。 Oracle数据字典的四大类视图:
- user - all - DBA - v$
用户拥有的对象 用户可访问对象 所有数据对象 服务器性能对象
其他视图:
- DICTIONARY
显示所有数据字典的数据表、视图和同义词
显示数据对象的所有者、授权者和权限
- TABLE_PRIVILEGES - IND
User_indexes的同义词
常用视图
DICTIONARY、TABLE_PRIVILEGES、IND
21
Company Confidential - For internal use only
ALL_TABLES、USER_OBJECTS 数据字典使用示例:
例一:SELECT distinct object_name,
object_type FROM usr_objects
例二:SELECT *
FROM user_constraints WHERE table_name =‘T_ITEM‘
LESSON 4用户访问控制:
在一个多用户数据库环境,必须维护数据访问和使用的权限,Oracle数据库管理器提供以下安全机制控制:
I. II. III. IV.
控制数据库的访问;
提供数据库对象的局部访问; 通过数据字典验证赋予和接收特权; 为数据库对象创建同义词。
数据库安全分为两类,一是系统安全,二是数据安全。系统安全控制数据库的访问和使用这一层次,例如用户和密码,用户能使用的数据空间,用户允许使用的操作系统等等;数据库安全控制数据库对象的访问和使用,以及能在这些数据库对象上能进行的操作。
权限的概念即是执行特定SQL语句的权利。数据库的系统管理员具有最高的权限,普通用户必须有系统管理员赋予权限来访问数据库和数据库对象,当然,用户也可具有赋予其他用户或角色的权利。
系统权限:
DBA具有最高级系统权限,典型的系统权限有: 系统权限 CREATE USER DROP USER DROP ANY TABLE BACKUP ANY TABLE 创建用户格式:
CREATE USER user IDENTIFIED BY password 操作授权 赋予创建其他Oracle用户权限 删除任何用户 删除任何束中的表 备份任何束中的表
GRANT privilege [, privilege ……] TO user [, user ……] Company Confidential - For internal use only 22