千家信息网

Oracle 约束

发表于:2024-10-17 作者:千家信息网编辑
千家信息网最后更新 2024年10月17日,一、约束的概念通俗来讲,约束是为了使被填入的数据更加符合业务规范、保证数据完整性而开发设计的手段。如果进行的DML(更新、插入、删除行)或DDL(此处指ALTER更改操作)操作不合符业务规范(约束)要
千家信息网最后更新 2024年10月17日Oracle 约束

一、约束的概念

通俗来讲,约束是为了使被填入的数据更加符合业务规范、保证数据完整性而开发设计的手段。

如果进行的DML(更新、插入、删除行)或DDL(此处指ALTER更改操作)操作不合符业务规范(约束)要求,则数据库会拒绝请求;

约束既可以是表级约束也可以是列级约束,需要强调的是notnull 一定是列级的。

在定义约束的时候,正常应该按照语法格式和命名规则进行定义,如若没有给出约束的名称,则Oracle会给约束按照SYS_Cn(n为自然数,由Oracle根据流水生成),如SYS_C001684,推荐大家还是养成良好的学习习惯,正确命名约束;

二、Oracle约束分类

非空(NOT NULL)约束、 唯一(UNIQUE)约束、主键(PRIMARY KEY)约束、外键(FOREIGN KEY)约束、条件(CHECK)约束、REF约束。

三、Oracle约束关系比照图

约束名

中文含义

约束

类型

命名规范

特征

备注说明

NOT NULL

非空约束

C

NN_表名_列名

不允许空值

只能定义在列上

UNIQUE

唯一值约束

U

UK_表名_列名

值不允许重复,但是可以为NULL并且NULL可以有多个,因为NULL<>NULL,组合列个数不能超过32个。

需要定义UNIQUE的列不能是主键列,即一个列不能既有主键约束又有UNIQUE约束

PRIMARY KEY

主键约束

P

PK_表名

值不能重复并且不能为NULL,组合列个数不能超过32个。

一个表或视图只能有一个主键

FOREIGN KEY

外键约束

R

FK_表名_列名

存的父表主键的值,与父表存在依赖关系,插入新值时,如果外键的值在父表中没有则无法插入;

外键是把双刃剑,在增加子父表关系验证的同时,牺牲了oracle数据性能,现在大型数据设计中会避免使用外键。

CHECK

条件约束

C

CK_表名_列名

自定义的约束检查,按照开发设计者的要求进行定义,比如要求检查输入值的符合某个范围,比如年龄列需要大于等于1岁小于邓宇120 CHECK(AGE BETWEEN 1 AND 120)

约束条件定义灵活

四、约束查看

1、 DBA_CONSTRAINTS:数据库中所有的约束定义

2、 ALL_CONSTRAINTS:用户有权限查看的表的约束;

3、 USER_CONSTRAINTS:属于当前登陆用户创建的约束;

约束视图中关键字段说明

OWNER:约束创建人

CONSTRAINT_NAME:约束的名字

CONSTRAINT_TYPE:约束的类型,参照上图

SEARCH_CONDITION:可以通过点击大文本进行查阅约束具体内容

STATUS:约束当前的状态,是否有效

五、约束创建

1、 约束正常情况下应当在表设计、创建时定义完整,如若使用中发现需要定义某种约束,这需要首先处理不符合规范要求的数据然后再行定义约束并且时间越早越好。

2、 下面我们会使用CREATETABLE 时创建约束,包括NOT NULLPRIMARY KEYFOREIGN KEYUNIQUE以及CHECK约束。

SQL>CREATETABLEconstraint_test (

cno VARCHAR2(4) PRIMARYKEY,

cname VARCHAR2(40) UNIQUE,

cdate DATE DEFAULTTO_DATE(TO_CHAR(SYSDATE,'YYYY-MM-DD'),'YYYY-MM-DD') NOTNULL)

3、 下面是使用ALTER 方式进行后续追加约束的方式

--增加一列备注(note)列,并且要求使用CHECK约束检查只能输入字母的字符串

SQL>ALTERTABLE constraint_test ADD note VARCHAR2(100);

SQL>ALTERTABLE constraint_test ADD CONSTRAINT ck_constraint_test_note

CHECK(REPLACE(TRANSLATE(UPPER(note),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','A'),'') IS NOT NULL);

六、约束删除
1、语法格式:ALTERTABLE【表名】 DROPCONSTRAINT【约束名】;

2、举例:ALTERTABLE constraint_test DROPCONSTRAINTck_constraint_test_note;

七、约束重命名

1、 语法格式:

ALTERTABLE【表名】RENAME CONSTRAINT【旧约束名】TO【旧约束名】;

2、举例:ALTERTABLE constraint_test RENAMECONSTRAINTnn_constraint_test_note TO ck_constraint_test_note;

八、禁用约束

1、 语法格式:

ALTERTABLE【表名】DISABLECONSTRAINT【约束名】CASCADE;

2、 举例:

ALTERTABLE constraint_test DISABLECONSTRAINTck_constraint_test_note [CASCADE];

3、 说明1cascade是一个可选选项,例如父表中的主键是子表的外键,如果我们想禁用父表中的主键约束效果同时也禁用字表的外键约束,此时就可以启用CASCADE 这个参数;

4、 说明2:如果禁用约束会被Oracle自动创建索引(如主键、外键、unique等),在禁用该约束的同时也会删除该约束对应的索引,这显然对于大数据表来说使我们不想看见的,所以我可以在禁用约束的时候选择保留索引,方法是:

ALTERTABLE【表名】DISABLECONSTRAINT【约束名】INDEX;

九、启用约束

1、 语法格式:

ALTERTABLE【表名】ENABLECONSTRAINT【约束名】INDEX;

2、 说明:我们在禁用主键和外键的时候,可以通过禁用父表的主键后加cascade的方式进行偷懒,但是如果重新启用,则需要单独一一启用;

十、 约束状态

ENABLE(可用)、VALID(有效)、INVALID(无效)、DISABLE(禁用)

十一、 关于使用约束的建议

1、应该在创建表的时候就定义好所需的各种Oracle约束。如果没有的话,应尽可能早地加上所需要的Oracle约束,这样会使系统更可靠,更容易维护;(这个视具体情况而言)

2、 Oracle系统进行过多的约束检查会大大的降低Oracle数据库系统的效

十二、 十二、约束章节其他

1、 不能在视图上指定字段为NULL或者 NOT NULL

2、 使用主键、外键的报表在删除的时候,必须依照先删除字表后删除父表顺序进行操作,或者在父表删除语句后加cascade关键字,推荐一步步操作;


数据 时候 格式 语法 检查 设计 同时 数据库 方式 条件 系统 索引 视图 有效 业务 个数 关键 可以通过 备注 字段 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 严守政治纪律强化网络安全 怎么连接ps4服务器 滨州智能养老软件开发专业制作 临沂高校党建软件开发公司 教育局网络安全建设办法 膜绘科技对互联网有什么影响 财务怎么录入初始数据库 与游戏服务器发生网络错误 开关oracle数据库 数据库英文版怎么用 密云区网络技术开发市场报价 数据库怎么查询从大到小 有趣的网络安全宣传视频 软件开发师和机械工程师 软件开发工程师的出路 外企软件开发高管工资多少 中文科技期刊数据库的出版单位 河南cs服务器云主机 数据库镜像高性能高可用 地理信息系统非定位数据库 acctctl数据库 玉树软件开发应用范围 网络安全宣传周巡展 中文版服务器监控软件 金华熙宝网络技术有限公司 独立站购买域名后需要租服务器吗 网络安全龙头涨幅 上海摩普网络技术有限公司融资 西山租房网络安全 网络安全保护第一级
0