Keep Thinking! My Yahoo ID-silvercheng2006@yahoo.com

DDL语句学习笔记

上一篇 / 下一篇  2009-02-01 01:21:10 / 个人分类:数据库

DDL部分主要用于创建各种类型的对象,包括表,视图,索引,主键,外键,序列,同义词以及数据库链接等

a. 表                
用create table的语句可以创建表,简单语法如下:
CREATE TABLE [[database.]owner.]table_name
(column_name datatype [not null|null] INDENTITY[seed,increment][constraint]
[,column_name datatype [not null|null] INDENTITY[seed,increment]]
[constraint] ...)
ON file group]
用户不仅要给出表的名称,还必须给出表中所有的列。                                                                                                         

b. 主键
主键用来约束表的一个列或者几个列,主键的取值是唯一并且是非空的。在关系数据库中,使用主键来实现数据的一致性和完整性。可以使用关键字Primary Key来建立主键。在Oracle系统中,一旦在表的某一列或者几列上创建了主键约束,则Oracle会自动为该表建立一个唯一性索引。
Oracle数据库引擎强制主键约束规则,在创建主键时,首先,所有主键值都系唯一的,其次,它们必须有一个值,也就是说,作为主键的列不能为NULL 。
主键约束执行可以暂时的disable,然后再enable。使用alter table语句来完成,约束选项为:DISABLE或ENABLE,约束的这两种状态一个很大的好处就是在大批量加载数据时,可以将约束置为disable,disable约束可以减少数据加载时间,是因为索引被disable了,因此索引不需要被更新。加载完后,enable约束,约束规则仅仅应用于新加载的数据。

1. 在创建表时定义主键
示例:在创建表dept时,在deptno列上定义了主键(可以不指定主键名称,Oracle会自动为该主键添加名字)
create table dept
(deptno number(2),
loc varchar(10),
Primary Key (deptno)
);
或者
create table dept
(deptno number(2)Primary Key,
loc varchar(10)
);
或者更详细一点
create table dept
(deptno number(2),
loc varchar(10),
Constraint pk_deptno PRIMARY KEY (deptno)
USING INDEX TABLESPACE indx
STROAGE (INITIAL 10M NEXT 5M PCTINCRESE 0)
)TABLESPACE user STROAGE (INITIAL 10M NEXT 5M PCTINCRESE 0)

Oracle强烈建议,任何一个应用程序的库表至少需要创建两个表空间,其中之一用于存储表数据,而另一个用于存储索引数据。因为如果把两者摆在一起的话,会引起表数据和索引数据I/O操作的竞争,影响系统性能,如果能把两个空间从物理上分开,那就更好啦!

2. 使用alter table语句定义主键
如果在创建表的时候没有定义主键,可以使用alter table... ADD CONSTRAINT PRIMARY KEY来创建主键,语法如下:
ALTER TABLE dept
ADD CONSTRAINT pk_deptno PRIMARY KEY (deptno)

3. 使用alter table语句修改主键约束
alter table dept disable constraint pk_deptno
alter table dept enable constraint pk_deptno
如果存在引用该主键的外键值,必须首先删除主外键关系,才能使主键无效

4. 删除主键
alter table dept DROP CONSTRAINT pk_deptno [CASCADE];--如果加CASCADE,系统自动删除时,也按照一下顺序操作:
5. 使依赖该主键的外键无效,然后删除该外键
6. 使该主键无效,然后删除该主键
alter table dept DROP PRIMARY KEY;
或者
alter table dept DROP constraint pk_deptno ;

c. 外键
外键约束可以保证该数据列与所引用的主键约束的数据列一致。在创建外键前,先要完成引用的主键的创建,然后才能声明外键和引用。
1. 在创建表时定义外键
create table dept
(deptno number(2),
loc varchar(10),
Constraint pk_deptno Primary Key (deptno)
);
create table emp
(empno number(4),
empname varchar(10),
deptno number(2),
Constraint fk_deptno FOREIGN Key (deptno) REFERENCES dept(deptno) ON DELETE CASCADE
);
2. 使用alter table语句定义外键
alter table emp add constraint fk_deptno FOREIGN Key (deptno) REFERENCES dept(deptno) ON DELETE CASCADE
3. 修改外键的状态
alter table emp disable constraint fk_deptno;
4. 删除外键
alter table emp drop constraint fk_deptno;

d. 约束

约束也称为完整性约束,包括主键,外键,check,not null和unique index共五种类型。
1. CHECK约束
用于增强表中数据内容规则的一致性,语法是:
CONSTRAINT [constraint_name] CHECK (condition)

例如:
create table dept
(deptno number(2),
loc varchar(10),
sex char(2) CHECK (sex='male' or sex ='female'),
Constraint pk_deptno Primary Key (deptno)
);

f. NOT NULL约束

NOT NULL 约束应用在单一列上,说明该数据列必须有值。
create table dept
(deptno number(2),
loc varchar(10)NOT NULL,
sex char(2) CHECK (sex='male' or sex ='female'),
Constraint pk_deptno Primary Key (deptno)
);
也可以创建表后再进行指定
alter table dept MODIFY loc NOT NULL;

g. 唯一性约束(UNIQUE)
此约束要求一列或一组列的每一个值都是唯一的。唯一值约束允许有空值,除非此列也应用了NOT NULL非空约束。
create table dept
(deptno number(2),
loc varchar(10),
Constraint unique_deptno UNIQUE (deptno)
USING INDEX TABLESPACE indx
STROAGE (INITIAL 10M NEXT 5M PCTINCRESE 0)
)TABLESPACE user STROAGE (INITIAL 10M NEXT 5M PCTINCRESE 0)

使其无效:
alter table dept DISABLE Constraint unique_deptno;

删除:
alter table dept DROP Constraint unique_deptno;

直接使用create unique index 语句创建唯一性索引:
create unique index index—name on dept(deptno) tablespace indx

h. 索引

索引是关系数据库中用于存放表中每一条记录位置的一种对象,主要目的是加快读取速度和完整性检查。
创建索引:
create unique index index—name
ON table-name(column...)
[CLUSTER schema.cluster]
[INITRANS n]
[MAXTRANS n]
[PCTFREE n]
[STROAGE storage]
[TABLESPACE tablespace]
[NO SORT]

create unique index index—name on dept(deptno) tablespace indx

修改索引:
alter unique index index-name REBUILD storage (INITIAL 10M NEXT 5M PCTINCRESE 0);
修改为逆键索引:
alter unique index index-name REBUILD reverse;
删除索引:
DROP index schema.index

Silver

Written @01:06 2009-2-1


TAG: 数据库

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2020-07-10  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 2968
  • 日志数: 8
  • 建立时间: 2009-01-16
  • 更新时间: 2009-02-02

RSS订阅

Open Toolbar