您的位置:首页 > 数据库 > Oracle

Oracle Constraint 约束

2012-05-25 15:41 375 查看
Oracle Constraint

一、约束的种类:

1、not null(非空约束)

说明:确保列不能为NULL,必须提供数据,表可有多个。

2、unique(唯一约束)

说明:唯一标识列的数据,可为空,空可以重复,其它值不能重复。创建unique时会自动创建索引,表可有多个。

3、check(检查约束)

说明:强制表行数据必须满足的条件,检查约束(检查约束可定义列级或表级),表可有多个。

4、primary key(主键约束)

说明:唯一标识表行的数据,不能重复,也不能为NULL,一个表只能由一个主键,建立主键的时候会自动建立B树索引。

5、foreign key(外键约束)

说明:定义主从表之间的关系,表可有多个。

注意事项

1、可在create table或alter table table_name add/drop/modify来建立、修改、删除约束。

2、定义约束可以无名(系统自动生成约束名)和自己定义约束名(特别是主键、外键)

3、主键和外键被称为表约束,而not null和unique之类的约束被称为列约束。

4、通常将主键和外键作为单独的命名约束放在字段列表下面,而列约束可放在列定义的同一行,这样更具有可读性。

5、not null约束由alter table table_name modify创建,其余由alter table table_name add创建。

二、约束的创建与新增

1、创建not null约束

1.1、创建表格时创建约束

CREATE TABLE table_name1

(

aa NUMBER [CONSTRAINT Constraint_name] NOT NULL --方法(约束名可指定或由系统自动生成)

);

1.2、在表格已有字段中创建约束

alter table table_name1 modify aa not null;

1.3、新增字段时创建约束

alter table table_name1 add c number [CONSTRAINT Constraint_unique_name] not null;

2、创建unique约束

2.1、创建表格时创建约束

CREATE TABLE table_name1

(

c VARCHAR2 (30) [CONSTRAINT Constraint_unique_name] UNIQUE, --方法一(约束名可指定或由系统自动生成)

d VARCHAR2 (30),

[CONSTRAINT Constraint_unique_name] UNIQUE (d) --方法二(约束名可指定或由系统自动生成)

);

2.2、在表格已有字段中创建约束

alter table table_name1 add [CONSTRAINT Constraint_unique_name] unique(a);

2.3、新增字段时创建约束

alter table table_name1 add e number [CONSTRAINT Constraint_unique_name] UNIQUE;

3、创建check约束

3.1、创建表格时创建约束

CREATE TABLE table_name1

(

d number [CONSTRAINT Constraint_name] check (d BETWEEN 20 AND 100), --方法一(约束名可指定或由系统自动生成)

c NUMBER,

[CONSTRAINT Constraint_name] CHECK (c BETWEEN 10 AND 50) --方法二(约束名可指定或由系统自动生成)

);

3.2、在表格已有字段中创建约束

alter table table_name1 add [CONSTRAINT Constraint_name] check(c between 10 and 50);

3.3、新增字段时创建约束

alter table table_name1 add e number [CONSTRAINT Constraint_name] check (e BETWEEN 20 AND 100);

4、创建primary key约束

4.1、创建独立主键

4.1.1、创建表格时创建约束

CREATE TABLE table_name1

(

a NUMBER [CONSTRAINT Constraint_name] PRIMARY KEY, --方法一(约束名可指定或由系统自动生成)

b number,

[CONSTRAINT Constraint_name] PRIMARY KEY (b) --方法二(约束名可指定或由系统自动生成)

);

4.1.2、在表格已有字段中创建约束

alter table table_name1 add [CONSTRAINT Constraint_name] primary key(a);

4.1.3、新增字段时创建约束

alter table table_name1 add a NUMBER [CONSTRAINT Constraint_name] PRIMARY KEY;

4.2、创建复合主键

4.2.1、创建表格时创建约束

CREATE TABLE table_name2

(

a NUMBER,

b VARCHAR2 (10),

[CONSTRAINT Constraint_name] PRIMARY KEY (a, b) --复合约束(复合约束只能定义表级)

);

4.2.2、在表格已有字段中创建约束

alter table table_name2 add [CONSTRAINT Constraint_name] primary key(a, b);

5、创建foreign key约束

5.1、创建独立外键

5.1.1、创建表格时创建约束

CREATE TABLE table_name3

(

b NUMBER [CONSTRAINT Constraint_name] REFERENCES table_name1(a) --外键约束(a必须是table_name1的主键)

);

5.1.2、在当前已有字段中创建外键

alter table table_name3 add [CONSTRAINT Constraint_name] foreign key (b) references table_name1(a);

5.1.3、新建字段并创建外键

alter table table_name3 add c number [CONSTRAINT Constraint_name] references table_name1(a);

5.2、创建复合外键

5.2.1、创建表格时创建约束

CREATE TABLE table_name3

(

c NUMBER,

d VARCHAR2 (10),

[CONSTRAINT Constraint_name] foreign key (c,d) references table_name2(a,b) --复合约束(复合约束只能定义表级)

);

5.2.2、在表格已有字段中创建约束

alter table table_name3 add [CONSTRAINT Constraint_name] foreign key (e,f) references table_name2(a,b);

5.3外键的级联删除

5.3.1、级联删除相关记录

ALTER TABLE book ADD CONSTRAINT person_book_pid_fk FOREIGN KEY (pid) REFERENCES person(pid) ON DELETE CASCADE ;

--级联删除记录(向book表的字段pid设为外键,并级联person表的主键pid,当person表的pid记录被删除,级联删除book表的所有相关记录)

5.3.2、级联删除所有记录

ALTER TABLE book ADD CONSTRAINT person_book_pid_fk FOREIGN KEY (pid) REFERENCES person(pid) ON DELETE set null;

--级联删除记录(向book表的字段pid设为外键,并级联person表的主键pid,当person表的pid记录被删除,级联删除book表的所有记录)

三、修改约束名

alter table table_name1 rename constraint fk_b to fkdno;

四、删除约束

1、方法一(通用)

alter table table_name1 drop constraint fkdno [cascade];

级联删除,当删除特定表的主键约束时,如果该表具有相关的从表外键,必须带有casacade,否则报错

2、方法二(针对primary key)

alter table table_name2 drop primary key [cascade];

级联删除,当删除特定表的主键约束时,如果该表具有相关的从表外键,必须带有casacade,否则报错

五、激活与禁止约束

禁止

alter table table_name2 disable constraint con_not_bb;

激活

alter table table_name2 enable constraint con_not_bb;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: