iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle 约束详解
  • 576
分享到

Oracle 约束详解

2024-04-02 19:04:59 576人浏览 泡泡鱼
摘要

一 约束的定义 约束是强加在表上的规则或条件。确保数据库满足业务规则。保证数据的完整性。当对表进行DML或DDL操作时,如果此操作会造成表中的数据违反约束条件或规则的话,系统就会拒绝执行这个操作。约束可以是

一 约束的定义

约束是强加在表上的规则或条件。确保数据库满足业务规则。保证数据的完整性。当对表进行DML或DDL操作时,如果此操作会造成表中的数据违反约束条件或规则的话,系统就会拒绝执行这个操作。约束可以是列一级别的 也可以是表级别的。定义约束时没有给出约束的名字,ORACE系统将为该约束自动生成一个名字,其格式为SYS_Cn,其中n为自然数(强烈建议各位在创建表或增加约束时,给约束定义名称。)
oracle中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性能,所以作为维护数据完整性的首选。
列级约束:
列级定义是在定义列的同时定义约束;
column [CONSTRaiNT constraint_name] constraint_type
表级约束:
表级定义是指在定义了所有列后,再定义约束,这里需要注意,not null约束只能在列级上定义;
column ,...,
[CONSTRAINT constraint_name] constraint_type (column,...)

二 约束功能

约束的功能:实现一些业务规则,防止无效的垃圾数据进入数据库,维护数据库的完整性(完整性指正确性与一致性)。从而使数据库的开发和维护都更加容易。

三 约束的分类

1 not null(非空)
如果在列上定义了not null,那么当插入数据时,必须为列提供,数据不能为NULL。约束只能在列级定义,不能在表级定义。

2 unique(唯一)
当定义了唯一约束后,该列值是不能重复的,但是可以为null。
3 primary key(主键)
用于唯一的标识表行的数据,当定义主键约束后,该列不但不能重复而且不能为NULL。一张表最多只能有一个主键,但是可以由多个unique约束。
创建主键或唯一约束后,ORACLE会自动创建一个与约束同名的索引(UNIQUENES为UNIQUE唯一索引)。需要注意的是:每个表只能有且有一个主键约束。
4 foreign key(外键)
用于定义主表和从表之间的关系,外键约束要定义在从表上,主要则必须具有主键约束或是unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为NULL。
用来维护从表(Child Table)和主表(Parent Table)之间的引用完整性. 外键约束是个有争议性的约束,它一方面能够维护数据库的数据一致性,数据的完整性。防止错误的垃圾数据入库; 另外一方面它会增加表插入、更新等sql性能的额外开销,不少系统里面通过业务逻辑控制来取消外键约束。例如在数据仓库中,就推荐禁用外键约束。
5 check
用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在1000~2000之间,如果不在1000~2000之间就会提示出错。

四 约束命令规范

约束名称建议自己定义一套命名规则,否则使用系统生成的约束名,很难能把它和对应的表、字段联系起来。
    非空约束     NN_表名_列名
    唯一约束     UK_表名_列名
    主键约束     PK_表名
    外键约束     FK_表名_列名
    条件约束     CK_表名_列名
    默认约束     DF_表名_列名
如果约束名称超过32位长度,建议应该缩写表名,而不应用NN_表名_数字。不过具体视情况而定,很多时候 DF_表名_列名 这样命名,往往超出了32字符。所以有时候需要缩写表面或是采用其它规则。

五 创建约束
1 not null(非空)
创建
SQL> create table t1(id number,name varchar2(20) constraint nn_t1_id not null);

Table created.
SQL> col CONSTRAINT_NAME fORMat A50
SQL> col OWNER format A20
SQL> select constraint_name,constraint_type,owner from user_constraints;

CONSTRAINT_NAME C OWNER


SYS_C009047 V SCOTT
FK_DEPTNO R SCOTT
SYS_C009046 C SCOTT
NN_T1_ID C SCOTT
PK_DEPT P SCOTT
PK_EMP P SCOTT

6 rows selected.
修改
SQL> drop table t1 purge;

Table dropped.

SQL> create table t1(id number,name varchar2(20));

Table created.

SQL> alter table t1 modify id constraint nn_t1_id not null;

Table altered.

SQL> select constraint_name,constraint_type,owner from user_constraints;

CONSTRAINT_NAME C OWNER


FK_DEPTNO R SCOTT
SYS_C009046 C SCOTT
NN_T1_ID C SCOTT
PK_DEPT P SCOTT
PK_EMP P SCOTT
SYS_C009047 V SCOTT
2 unique(唯一)
创建
SQL> drop table t1 purge;

Table dropped.

SQL> create table t1(id number,qq number,constraint un_t1_qq unique(qq));

Table created.
修改
SQL> drop table t1 purge;

Table dropped.

SQL> create table t1(id number,qq number);

Table created.
SQL> alter table t1 add constraint un_t1_qq unique(qq);

Table altered.
3 primary key(主键)
创建
SQL> drop table t1 purge;

Table dropped.

SQL> create table t1(id number,qq number,constraint pk_t1_id primary key(id));

Table created.
修改
SQL> drop table t1 purge;

Table dropped.
SQL> create table t1(id number,qq number);

Table created.

SQL> alter table t1 add constraint pk_t1_id primary key(id);

Table altered.
4 foreign key(外键)
创建
SQL> create table t2(id number,cc number,constraint fk_t2_id foreign key(id) references t1(id));

Table created.
修改
SQL> drop table t2 purge
2 ;

Table dropped.

SQL> create table t2(id number,cc number);

Table created.

SQL> alter table t2 add constraint pk_t2_id foreign key(id) references t1(id);

Table altered.
当定义了外部键约束之后,要求外部键列的数据必须在主表的主键列(或惟一列)中存在,或者为NULL,FOREING KEY约束既可以在列级定义,也可以在表级定义。

关键字说明:
(1) FOREING KEY:该选项用于指定在表级定义外部键约束。当在表级定义外部键约束时必须指定该选项,在列级定义外部键约束不需要指定该选项
(2) REFERENCES:该选项用于指定主表名及其主键列。当定义外部键约束时,该选项必须指定.。
(3) ON DELETE CASCAED:该选项用于指定级联删除选项。如果在定义外部键约束时指定了该选项,那么当删除主表数据时会级联删除从表的相关数据。
(4) ON DELECT SET NULL:该选项用于指定转换相关的外部键值为NULL,如果在定义外部键约束时指定了该选项,那么当删除主表数据时会将从表外部键列的数据设置为NULL。
5 check(检查性约束)
创建
SQL> create table t3(id number,sal number,constraint ck_t3_sal check(sal between 5000 and 50000));

Table created.
修改
SQL> drop table t3 purge;

Table dropped.

SQL> create table t3(id number,sal number);
六 维护约束

1 增加约束
(1) 如果增加UNIQUE、PRIMARY KEY、FOREIGN KEY 和CKECK 必须使用ALTER TABLE语句的ADD子句;
(2) 如果增加NOT NULL约束,那么必须使用ALTER TABLE语句的MODIFY子句,如:
ALTER TABLE table_name ADD [CONSTRAINT constraint_name]
constraint_type (column,...)
ALTER TABLE table_name MODIFY column
[CONSTRAINT constraint_name] NOT NULL;

2 修改约束名
在同一个方案中,约束名必须惟一,并且约束名也不能与其他对象同名。当用IMPDP工具或者IMP工具导入其他对象时,如发现有同名的对象,将会出错
语法:
ALTER TABLE table_name RENAME CONSTRAINT old_constraint_name
TO new_constraint_name;
SQL> ALTER TABLE T1 rename constraint pk_t1_id to pk_t1_idnew
2 ;

Table altered.

3 禁止约束

禁止约束指使约束临时失效。当禁止了约束之后,约束规则将不再生效。在使用SQL*LOADER或INSERT装载数据之前,为了加快数据装载速度,应该首先禁止约束,然后装载数据。
语法:
ALTER TABLE table_name
DISABLE CONSTRAINT constaint_name [CASCAED];--CASCAED用于指定级联禁止从表的外部键
SQL> ALTER TABLE T2 DISABLE constraint pk_t2_id;

Table altered.
4 激活约束

语法:
ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;
SQL> ALTER TABLE T2 enABLE constraint pk_t2_id;

Table altered.
5 删除约束

当删除特定表的主键约束时,如果该表具有相关的从表,那么在删除主键约束时必须带有CASCAED选项
语法:
ALTER TABLE table_name DROP
CONSTRAINT constraint_name |PRIMARY KEY
SQL> ALTER TABLE T3 drop constraint ck_t3_sal;

Table altered.
6 显示信息

1.USER_CONSTRAINTS
2.USER_CONS_COLUMNS
3.SQL> set line 100
SQL> col CONSTRAINT_NAME format A20
SQL> col table_NAME format A20
SQL> col column_NAME format A20
SQL> select constraint_name,table_name,column_name from user_cons_columns where table_name='T1';

CONSTRAINT_NAME TABLE_NAME COLUMN_NAME


PK_T1_ID T1 ID

Table created.

SQL> alter table t3 add constraint ck_t3_sal check(sal>5000);

Table altered.

您可能感兴趣的文档:

--结束END--

本文标题: Oracle 约束详解

本文链接: https://www.lsjlt.com/news/34879.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL主键约束和外键约束详解
    目录1、PRIMARY KEY2、FOREIGN KEY3、表的设计3.1 一对一3.2 一对多3.3 多对多1、PRIMARY KEY 上期我们讲述了 not null 和 unique 约束,而本期的第一个约束就是这...
    99+
    2023-03-13
    mysql主键约束和外键约束 mysql主键和外键
  • MySQL约束超详解
    目录MySQL约束操作1.非空约束 2.唯一约束3.主键约束4.外键约束5、级联MySQL约束操作 概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性。 分类: ...
    99+
    2024-04-02
  • Oracle的约束介绍与约束维护
    目录一、什么是约束?二、约束分类1、not null(非空)2、default(默认)3、unique(唯一)4、primary key(主键)5、foreign key(外键):6...
    99+
    2024-04-02
  • MySQL约束constraint用法详解
    目录前言一:主键约束 primary key1.添加单列主键2.添加多列主键(联合主键)3.通过修改表结构添加主键4.删除主键约束二:自增长约束 auto_increment1.添加自增长约束2. 指定自增字段初始值三:...
    99+
    2023-05-12
    mysql约束constraint mysql约束怎么设置 mysql constraint
  • 怎么理解oracle外键约束
    这期内容当中小编将会给大家带来有关怎么理解oracle外键约束,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 外键约束的创建方法tes1的建表...
    99+
    2024-04-02
  • AndroidConstraintLayout约束布局使用详解
    目录基本属性约束强度Visibility属性控件宽高比子控件之间的宽高占比锚向指示线Chains链基本属性 可以让本View的一个方向置于目标View的一个方向,比如 layout_...
    99+
    2022-11-13
    Android ConstraintLayout约束布局 Android ConstraintLayout Android 约束布局
  • SQL Server中的约束(constraints)详解
    目录一、约束的分类二、约束命名三、主键约束1、在创建表的时候创建主键约束。2、在已存在的表上创建主键约束3、复合主键的创建四、外键约束4.1、创建表的时候创建外键4.2、在已存在的表...
    99+
    2024-04-02
  • SQL语句 -非空约束 - 唯一约束 - 主键约束 - 默认约束 -外键约束
    文章目录 约束约束介绍和分类非空约束唯一约束主键约束默认约束案例练习外键约束 约束 约束介绍和分类 约束的概念: 约束是作用于表中列上的规则,用于限制加入表的数据 约束的存在保证了数据库中数据的正确性、有效性和完整性 ...
    99+
    2023-08-17
    sql 数据库 mysql
  • SQL Server中的约束(constraints)详解
    SQL Server中的约束是一种用于限制表中数据的规则。它们可以应用于列级别或表级别,并确保数据库中的数据遵循特定的规则和完整性要...
    99+
    2023-08-16
    SQL Server
  • MySQL六种约束的示例详解
    目录什么是约束外键约束什么是约束 作用于表上的规则,限制存储在表中的数据 约束分类: 约束描述关键字非空约束该字段数据不能为nullNOT NULL唯一约束该字段数据唯一不重复UNIQUE主键约束一行数据的唯一标识(非空...
    99+
    2023-02-21
    MySQL六种约束 MySQL约束
  • Mysql表的约束超详细讲解
    目录约束的概念空属性默认值列描述zerofill主键自增长唯一键外键约束的概念 约束:通过限制用户操作的方式,来达到维护数据本身安全,完整性的一套方案。 为什么要有约束? Mysql...
    99+
    2024-04-02
  • oracle的表级约束和列级约束有什么区别
    表级约束和列级约束都是用来保证数据的完整性和一致性的约束条件,但它们之间有一些区别: 表级约束是针对整个表的约束条件,而列级约束是...
    99+
    2024-04-20
    oracle
  • MySQL约束与索引概念详解
    目录一、关系型数据库设计规则二、数据完整性和约束与索引的概念三、约束的应用一、关系型数据库设计规则 遵循ER模型和三范式 E entity 代表实体的意思 对应到数据库当中的一张表R relationship 代表关系的...
    99+
    2023-04-07
    MySQL约束与索引 MySQL约束 MySQL索引
  • MySQL数据库表中的约束详解
    目录mysql表中的约束(constraint)约束分类非空约束唯一性约束复合约束主键约束自增列-AUTO_INCREMENT外键约束FOREIGN KEY约束CHECK约束DEFAULT约束MySQL表中的约束(con...
    99+
    2023-03-02
    MySQL表中的约束 MySQL数据库约束 MySQL约束的使用
  • C#泛型约束中的引用详解
    本篇内容介绍了“C#泛型约束中的引用详解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C# 泛型约束中的引用/值类型约束使用 C# 泛型,编...
    99+
    2023-06-17
  • Oracle中怎么创建约束
    Oracle中怎么创建约束,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Oracle  创建主键,外键, check...
    99+
    2024-04-02
  • TypeScript泛型约束条件示例详解
    目录什么是泛型泛型的应用场景泛型约束(限制条件)泛型函数调用指定类型总结什么是泛型 两个值之间存在的对应关系,就可以用泛型来解决 泛型的应用场景 当一个函数的返回值的类型需要与此函数...
    99+
    2024-04-02
  • PostgreSQL检查约束中怎么设置列约束和表约束
    这篇文章主要介绍PostgreSQL检查约束中怎么设置列约束和表约束,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、什么是检查约束?设置某个字段里的数值必须满足约束表达式的条件。检查约束是最常见的约束类型,形式为“...
    99+
    2023-06-14
  • SQL中的CHECK约束的详细讲解
    在SQL中,CHECK约束用于限制表中某列的取值范围。它可以用于在插入或更新数据时验证特定条件的有效性。 CHECK约束由以下几个部...
    99+
    2024-04-09
    SQL
  • 【MySQL】主键约束和外键约束
    目录 1、PRIMARY KEY 2、FOREIGN KEY 3、表的设计 3.1 一对一 3.2 一对多 3.3 多对多 1、PRIMARY KEY 上期我们讲述了 not null 和 unique 约束,而本期的第一个约束就...
    99+
    2023-09-01
    mysql 数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作