欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库的约束

程序员文章站 2022-06-04 10:59:11
...

约束的简介

数据的完整性是指数据的正确性和一致性,可以通过定义表时定义完整性约束,也可以通过规则,索引,触发器等。约束分为两类:行级和表级,处理机制是一样的。行级约束放在列后,表级约束放在表后,多个列共用的约束放在表后。

完整性约束是一种规则,不占用任何数据库空间。完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。用户可以指明约束是启用的还是禁用的,当约束启用时,他增强了数据的完整性,否则,则反之,但约束始终存在于数据字典中。

约束类型

总的来说有五种:唯一性和主键约束、外键约束、检查约束、空值约束、默认值约束:(后两个不讲)

有五大关键词,unique(唯一性)和Primary Key(主键), Foreign Key外键(), CHECK(检查), NOT NULL(非空), DEFAULT(默认值)

1。唯一性和主键约束。

要求某一列,或几列不能有重复的值,建立主键约束和唯一约束时,Oralce会基于约束列自动建立唯一索引;主键约束不允许为NULL,唯一约束允许为NULL,一张表只能建立一个主键约束。唯一性和主键约束类似,只是关键词不同而已,语法一致。

create table table_name
(
    col1 varchar2(32) not null primary key,
)

create table table_name
(
    col1 varchar2(32) not null constraint pk_id primary key,
)

create table table_name
(
    col1 varchar2(32) not null,
    col2 varchar2(32) not null foreign key,
    constraint pk_table_name primary key(col1,col2)
)

2。外键约束。

create table table_name
(
    col1 varchar2(32) not null references primary_table(primary_col) on delete cascade,
)

create table table_name
(
    col1 varchar2(32) not null,
    constraint fk_table_name foreign key references primary_table(primary_col) on delete set null
)

ON 后面的内容。这个是关联的关键。与删除修改密切相关。

NO ACTION:更新或删除父表中的数据时,如果会使子表中的外键违反引用完整性,该动作将被禁止执行。
CASCADE: 当父表中被引用列的数据被更新或删除时,子表中的相应的数据也被更新或删除。
SET NULL:当父表数据被更新或删除时,子表中的相应数据被设置成NULL值,前提是子表中的相应列允许NULL值。
SET DEFAULT:当父表数据被更新或删除时,子表中的数据被设置成默认值。前提是子表中的相应列设置有默认值。

3。检查约束。

检查列的类型和范围。
语法:constraint [constraint_name] check (condition); 比如:check(age >2)
补充:
主键、外键和索引的区别?
数据库的约束

注意:表的主键应当不具有任何业务含义

表通过主键来保证每条记录的唯一性,表的主键应当不具有任何业务含义,因为任何有业务含义的列都有改变的可能性。关系数据库学的最重要的一个理论就是:不要给关键字赋予任何业务意义。假如关键字具有了业务意义,当用户决定改变业务含义,也许他们想要为关键字增加几位数字或把数字改为字母,那么就必须修改相关的关键字。一个表中的主关键字有可能被其他表作为外键。就算是一个简单的改变,譬如在客户号码上增加一位数字,也可能会造成极大的维护上的开销。
为了使表的主键不具有任何业务含义,一种解决方法是使用代理主键,例如为表定义一个不具有任何业务含义的ID字段(也可以叫其他的名字),专门作为表的主键。