oracle基础 第四篇 约束

约束的作用

1、定义规则。

2、确保完整性。

注意事项:

如果不指定约束名 ,Oracle server 自动按照 SYS_Cn 的格式指定约束名 创建和修改约束: 建表的同时 建表之后 可以在表级或列级定义约束 可以通过数据字典视图查看约束。

作用范围:     ①列级约束只能作用在一个列上     ②表级约束可以作用在多个列上(当然表级约束也 可以作用在一个列上) 

 定义方式: 列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。

表级约束:

A、定义列级约束:

create table 表名 (字段名 字段数据类型 constraint 自己定义的约束名 约束类型......);

B、定义列级约束:

定义在表机构写完以后定义的约束。

create table 表名 (。。。。。。。constraint 自己定义的约束名 约束类型(字段名1、字段名2.。。));

C、查找约束名:

select constarint_name from user_constarint where table_name='表名';

D、更改约束名:

alter table 表名 rename constraint 旧的约束名 to 新的约束名;

E、禁用约束:

alter table 表名 disable constraint 约束名;

F、禁用约束:

alter table 表名 ensable constraint 约束名;

G、查找约束状态:

select constraint_name,status from user_constraint where table_name='表名';

H、删除约束:

alter table 表名 drop constraint 约束名;
alter table 表名 drop 约束类型;(例如表中的主键,就可以直接删除)

 

I、查找约束名、类型、约束条件:

select constraint_name , constraint_type, search_condition from user_conditions
where table_name='要查找的表名';

 

1、非空(not null) 约束:

非空(not null) 约束只能定义在列上

在创建表时设置非空约束

create table 表名 (字段名 字段数据类型 not null......);

例子:

CREATE TABLE USERINFO_t (
	ID NUMBER (8,0) NOT NULL,
	NAME NVARCHAR2 (8) NOT NULL
);

注意:在创建表时加非空约束,最好添加默认值(用default关键字添加),因为添加默认值,插入数据可能会报不能插入空值的错误。

在修改表时设置非空约束:

alter table 表名 motify 字段名 数据类型 not null;

例子:

ALTER TABLE USERINFO_T MODIFY NAME NVARCHAR2 (8) NOT NULL;

在修改时删除非空约束:

alter table 表名 modify 字段名 字段数据类型 null;

2、主键约束(primary key):

在创建表时设置主键约束:

create table 表名(字段名 数据类型 primary key.....  );

在修改表时设置主键约束:

alter table 表名 add constraint 约束名 primary key(字段名。。。。。。);

3、外键约束(foreign key):

 

FOREIGN KEY: 在表级指定子(从)表中的列 。

REFERENCES: 标示在父(主)表中的列。

在创建表时设置外键约束:

create table 从表名 (从表字段1 字段1数据类型 从表字段1约束,......,constraint 约束名 foreign key(从表的字段名)  
references 主表名(主表的主键) );


create table 从表名 (从表字段1 字段1数据类型 从表字段1约束,......,从表字段n 从表字段n数据类型  
references 主表名(主表的主键) );

例如:

CREATE userinfo_t (
	ID VARCHAR2 (8, 0) PRIMARY KEY,
	NAME NVARCHAR2 (8) NOT NULL,
    dept_userid  NVARCHAR2(8) ,
   constraint userinfo_t_dept_id  foreign key(dept_userid)  references  deptinfo(dept_id)
  
);

注意:1.设置外键约束时,主表的字段必须是主键。

           2.主从表相应的字段必须是同一个数据类型。

           3.从表中外键约束的字段的值必须来自主表的相应字段的值,或者为null值。

 

ON DELETE CASCADE(级联删除): 当父(主)表中的列被删除时,子(从)表中相对应的列也被删除 。

ON DELETE SET NULL(级联置空): 子(从)表中相应的列置空。

这两种设置在建表的时候设置,例如:

CREATE userinfo_t (
	ID VARCHAR2 (8, 0) PRIMARY KEY,
	NAME NVARCHAR2 (8) NOT NULL,
    dept_userid  NVARCHAR2(8) ,
   constraint userinfo_t_dept_id  foreign key(dept_userid)  references  deptinfo(dept_id)
  on DELETE cascade
);

在修改表时设置外键约束:

alter table 表名 add constraint 约束名 foreign key(从表的字段名)  
references 主表名(主表的主键);

添加级联删除的:

add table 表名 constraint 约束名 foreign key(从表的字段名)  
references 主表名(主表的主键) on DELETE cascade;

4、唯一约束(unique):

在创建表时设置唯一约束

create table 表名 (字段名 字段数据类型 unique,......);列级定义
create table 表名 (字段名 字段数据类型 ,...... , constraint 约束名  unique(字段名));表级定义

例如:

create table user_info (id number(8,0) primary key,name nvarchar2(20) not null, ide_id number(8,0) unique );

在修改表时添加唯一约束:

alter table 表名  add constraint 约束名 unique(字段名);

例如:

alter table user_info add constraint un_name_new unique(name);

5、检查约束(cheak), 满足每一行必须满足的条件 :

在创建表时设置检查约束

create table 表名 (字段名 字段数据类型 check(条件),......);列级定义
create table 表名 (字段名 字段数据类型 ,...... , constraint 约束名  check(条件));表级定义

例如:

create table user_info (id number(8,0) primary key,name nvarchar2(20) not null, salary
   number(7,0) check(salary>0) );

在修改表时添加检查约束:

alter table 表名  add constraint 约束名 check(条件);

 

注意:在创建表时设置约束时,非空约束只能在列级设置,不能在表级设置。

参考来自慕课网和尚硅谷

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风而行无疾而歌

看官,觉得不错,奖励一下呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值