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;
Oracle Constraint 约束
最新推荐文章于 2022-07-25 17:17:30 发布