Oracle Constraint 约束

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值