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

oracle 数据库的约束

2016-06-23 13:51 260 查看

一 为什么要使用约束

为了使我们的数据符合一定的规则

二 五种约束

约束有五种类型,主键约束,外键约束,非空约束,唯一性约束,检查约束

约束有两种定义方法:第一种是在定义列的时候定义约束,叫做列级定义。

第二种是所有列全部定义完后,在定义约束,该约束叫做表级定义(注意 not null只能在列级中定义),对于多个属性构成的码只能使用表级定义此约束

1.约束命名规范

    非空约束      NN_表名_列名
    唯一约束     UK_表名_列名
    主键约束     PK_表名
    外键约束     FK_表名_列名
    条件约束     CK_表名_列名
    默认约束     DF_表名_列名

2.非空约束(not null)

定义了非空约束后,插入数据的时候此列不能为空

列级语法格式:

create table table_name(column data_type  not null,.............);

增加:create table table_name modify column not null;

3.唯一性约束(unique)

定义了唯一性约束后,此列的值不能重复,但是可以为空

列级语法格式:

create table table_name(column data_type constraint  constrint_name(约束名) unique,.............);

增加约束:alter table table_name add constrint constraint(约束名)  unique(列名);

表级定义:create table table_name(column data_type,.............,constrint constraint(约束名)  unique(列名));

4.检查约束

定义该列符合某种规则

列级语法格式:

create table table_name(column data_type constraint  constrint_name(约束名) check(规则 ),.............);

增加约束:alter table table_name add constrint constraint(约束名)  check(规则);

表级定义:create table table_name(column data_type,.............,constraint  constrint_name(约束名) check(列名  规则));

5.主键约束

唯一的表示一行数据,定义了主键约束后,改行不能为空,也不能重复

列级定义语法格式:create table table_name(column data_type constraint  constrint_name(约束名) primary key,.............);

增加约束:alter table table_name add constrint constraint(约束名) primary key;

表级定义:create table table_name(column data_type,.............,constraint  constrint_name(约束名) primary key(列名));

6.外键约束

用于定义主表和从表之间的关系,外键约束定义在从表上,对应的在主表上必须有主键约束或unique约束

在定义外键约束后,要求外键约束的列必须在主表的主键列存在或者为null

列级定义语法格式:create table table_name(column data_type constraint  constrint_name(约束名)foreign key (从表 从表的主键名)references (主表,主表的主键),.............);

增加约束:alter table table_name add constrint constraint(约束名)
foreign key (主表 主表的主键名);

表级定义:create table table_name(column data_type ,.............,constraint  constrint_name(约束名)foreign key (主表 主表的主键名)references (主表,主表的主键));

外键约束注意的问题:
1.如果在设置外键时没有加 on delete set null 或者on delete cascade ,那么删除有被从表中引用的主表中的数据时,将无法删除该数据。

2.在设置外键时加上on delete cascade,就可以之间删除主表中的数据,并且从表中的数据也一块删除

3.在设置外键时加上on delete set null,就可以之间删除主表中的数据,从表中的此项数据被置为空值

三 查询约束

直接查询 user_constraints就可以看到有哪些约束

语法格式;

SELECT owner,constraint_name,table_name FROM user_constraints;

这个约束只告诉了名字,而并没有告诉在哪个字段上有此约束,这就需要查看另外一张数据字典表“user_cons_columns”;

语法格式;

SELECT owner,constraint_name,table_name,column_name FROM user_cons_columns;


四 删除约束

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