Oracle数据库中的数据完整性

news2024/10/7 8:30:37

目录

1.数据完整性约束作用

2.数据完整性约束的分类

3.完整性约束的状态

4.域完整性的实现

(1)check约束

①可视化方式创建check约束

②命令方式创建约束

③修改表创建的约束

④删除约束

(2)实体完整性约束实现

①primary key和unique的区别

②primary key和unique的相同点

③可视化方式创建主键和唯一性约束

④命令方式创建主键与唯一性约束

⑤修改创建的约束

⑥删除约束

 (3)参照完整性约束

①创建foreign key时考虑的因素

②可视化方式创建参照关系

③命令方式创建参照 

④修改外键约束

⑤删除表之间的参照关系


Oracle数据库中索引的基本使用

Oracle学习的相关知识点(汇总)

1.数据完整性约束作用

  • 在数据应用的代码中增强了商业规则;
  • 使用存储过程,可完整控制对数据的访问;
  • 增强了触发存储数据库过程的商业规则;

2.数据完整性约束的分类

  • 域完整性约束(或者列完成性)
    • 指的是一个数据集对某一列是否有效和确定是否允许空值;如使用check限制某一列的值只能在某一个范围内
  • 实体完整性(行完整性)
    • 要求表中每一行都有一个唯一的标识符;如主键约束
  • 参照完整性(引用完整性)
    • 保证主表与从表(被参照表)之间中数据的一致性;如建立主键和外键
      • 参照完整性的要求
        • 从表中不能引用不存在的键值
        • 如果主表中的键值更改了,那么在整个数据库中,对从表中该键值的所有引用都要进行一致性更改
        • 如果主表中没有关联的记录,则不能将记录添加到从表中
        • 如果要删除主表中的某一条记录,应该先删除从表中与该记录匹配的相关记录。
  • 完整性约束是通过限制列数据,行数据和表之间数据来保证数据完整性的有效方法,约束是保证完整性的标准方法,每一种数据完整性都由不同的约束类型来保证,约束能确保有效的数据输入到列中并维护表与表之间的关系。

3.完整性约束的状态

  • 禁止的非校验状态:该约束不起作用,但是依然存在数据字典中;
  • 禁止的校验状态:对约束列的任何修改都是禁止的。
  • 允许的非校验状态或者强制状态:可以向表中添加数据,但是与约束有冲突的数据不能添加;
  • 允许的校验状态:约束处于正常的状态。

4.域完整性的实现

(1)check约束

①可视化方式创建check约束

②命令方式创建约束

CREATE TABLE <表名>
( <列名> <数据类型> [DEFAULT <默认值>] [NOT NULL | NULL]
    [CONSTRAINT <CHECK约束名>] CHECK(<CHECK约束表达式>) /*定义为列的约束*/
    [,…n]
    [CONSTRAINT <CHECK约束名>] CHECK(<CHECK约束表达式>) /*定义为表的约束*/
)
  •  说明:
    • CONSTRAINT关键字用于为CHECK约束定义一个名称,如果省略则系统自动为其定义一个名称。
    • CHECK表示定义CHECK约束,其后表达式为逻辑表达式,称为CHECK约束表达式。如果直接在某列的定义后 面定义CHECK约束,则CHECK约束表达式中只能引用该列,不能引用其他列。如果需要引用不同的列,则必 须在所有的列定义完之后再定义CHECK约束。

例如:创建一个表demo,并且为该表的属性score创建一个check约束条件。

create table demo(
    sid VARCHAR(20) NOT NULL ,
    sname VARCHAR(20) NOT NULL,
    profession VARCHAR(20) NOT NULL,
    score NUMBER(4) check(score>60 and score<80) NOT NULL
);

③修改表创建的约束

ALTER TABLE <表名>
    ADD( CONSTRAINT <CHECK约束名> CHECK(<CHECK约束表达式>))

④删除约束

ALTER TABLE <表名>
    DROP CONSTRAINT <CHECK约束

(2)实体完整性约束实现

  • 一个表只能有一个primary key(主键)约束,而且primary key约束中的列不能取空值。
  • primary key约束是由多列组合定义的,则某一列的值可以重复,但是primary key约束定义中所有列的组合值必须唯一。
  • 如果要确保一个表中的非主键列不输入重复值,则在该列上定义一个唯一约束(UNIQUE)。

①primary key和unique的区别

  • 一个表只能创建一个primary key约束,但是可以根据需要对不同的列创建若干个unique约束。
  • primary key字段的值不能为NULL,而unique字段的值可以为NULL。

②primary key和unique的相同点

  • 它们都不允许表中对应字段存在重复值。
  • 在创建primary key和unique约束时都会自动产生索引。

③可视化方式创建主键和唯一性约束

④命令方式创建主键与唯一性约束

CREATE TABLE <表名> /*指定表名*/
    (<列名> <数据类型> [NULL |NOT NULL] /*定义字段*/
    {[CONSTRAINT <约束名>] /*定义约束名*/
    PRIMARY KEY | UNIQUE } /*定义约束类型*/
    [,…n]
    [, [CONSTRAINT <约束名>] {PRIMARY KEY | UNIQUE}(<列名>,[,…n]) ]]
)

 例:1:为表deptments创建主键约束。

 例子2:位表student创建unique约束。

create table student(
    sid VARCHAR(20) NOT NULL constraint demo02 primary key,
    status VARCHAR(20) NOT NULL constraint stdemo02 UNIQUE,
    sname VARCHAR(20) NOT NULL,
    profession VARCHAR(20) NOT NULL,
    score NUMBER(4) 
);

⑤修改创建的约束

ALTER TABLE <表名>
    ADD([CONSTRAINT <约束名>] {PRIMARY KEY | UNIQUE} (<列名>[,…n])

例子:为表deptments表的deptname创建一个唯一性约束。 

 

⑥删除约束

ALTER TABLE <表名>
    DROP CONSTRAINT <约束名>[,…n]

 (3)参照完整性约束

对于两个相关联的表(主表与从表)进行数据插入和删除时,通过参照完整性保证它们之间的数据一致性。主要使用foreign key定义从表外键,primary key定义主表主键,实现主表和从表之间的关联。

①创建foreign key时考虑的因素

  • 删除主表之前,必须删除从表(foreign key)约束;
  • 如果不删除或者禁止foreign key约束,则不能删除主表;
  • 删除包含主表的表空间之前,必须删除foreign key约束。

②可视化方式创建参照关系

③命令方式创建参照 

CREATE TABLE <从表名>
    ( <列定义> [ CONSTRAINT <约束名> ] REFERENCES <主表名>[ ( <列名> [ ,...n ] ) ]
    [,…n]
    [ [ CONSTRAINT <约束名> ] [ FOREIGN KEY ( <列名> [,...n ] ) [<参照表达式>]]
);
<参照表达式>::=
    REFERENCES <主表名>[ ( <列名> [ ,...n ] ) ]
    [ ON DELETE { CASCADE | SET NULL } 

 

例子1:为表Employee中的deptmentid建立外键 (参照表deptments为表employee建立外键)

例子2:当删除表CJB中的记录时,同时删除XSB表中的记录。

create table XSB(
    sid VARCHAR(20) NOT NULL constraint demo02 primary key,
    status VARCHAR(20) NOT NULL constraint stdemo02 UNIQUE,
    sname VARCHAR(20) NOT NULL,
    profession VARCHAR(20) NOT NULL,
    score NUMBER(4),
    constraint fk_xsb FOREIGN key(sid) reference cjb(sid) 
        on delete cascade
);

 

④修改外键约束

ALTER TABLE <表名>
    ADD CONSTRAINT <约束名>
        FOREIGN KEY( <列名>[,…n])
            REFERENCES <主表名>(<列名>[,…n]) <参照表达式>

例子:假设XSCJ数据库中的KCB表为主表,KCB的“课程号”字段已定义为主键。CJB表为从表,如下示 例用于将CJB的“课程号”字段定义为外键。 

ALTER TABLE CJB
    ADD CONSTRAINT FK_KC FOREIGN KEY(课程号)
        REFERENCES KCB(课程号)

 

⑤删除表之间的参照关系

删除表间的参照关系,实际上删除从表的外键约束即可。

ALTER TABLE <从表名>
    DROP CONSTRAINT <约束名>

例子:删除以上对“CJB.课程号”字段定义的FK_KC外键约束。 

ALTER TABLE CJB
    DROP CONSTRAINT FK

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

思科dhcp服务器动态获取ip地址

项目要求: 某公司共有网管中心、行政部、技术部、三个部门&#xff0c;分别处在一栋大楼中的两个楼层&#xff0c;为了保证公司内部主机始终能够连接Internet&#xff0c;采用双向冗余设计&#xff0c;分别使用路由器R1与路由器R2连接中国电信和中国联通。 1.首先为了避免不必要…

【算法详解】数据结构:7种哈希散列算法,你知道几个?

一、前言 哈希表的历史 哈希散列的想法在不同的地方独立出现。1953 年 1 月&#xff0c;汉斯彼得卢恩 ( Hans Peter Luhn ) 编写了一份IBM内部备忘录&#xff0c;其中使用了散列和链接。开放寻址后来由 AD Linh 在 Luhn 的论文上提出。大约在同一时间&#xff0c;IBM Researc…

项目进度管理

第3 章 项目进度管理 3.1 概述 1.项目进度管理是指在项目实施过程中&#xff0c;对各阶段的进展程度和项目最终完成的期限所进行的管理&#xff0c;是在 规定的时间内&#xff0c;拟定出合理且经济的进度计划&#xff08;包括多级管理的子汁划)&#xff0c;在执行该计划的过程…

常见的限流算法的原理以及优缺点

原文网址&#xff1a;常见的限流算法的原理以及优缺点_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍限流常用的算法及其优缺点。 常用的限流算法有&#xff1a; 计数器&#xff08;固定窗口&#xff09;算法滑动窗口算法漏桶算法令牌桶算法 下面将对这几种算法进行分别介绍…

tmux的简单使用

文章目录一、认识tmux1.1 会话1.2 tmux的作用1.3 tmux的安装二、tmux的使用2.1 会话管理2.1.1 创建会话2.1.2 退出会话2.1.3 从终端环境进入会话2.1.4 查看会话列表2.1.5 销毁会话2.1.6 重命名会话2.2 窗口管理2.3 窗格管理一、认识tmux 1.1 会话 命令行的典型使用方式是&…

rocketmq是如何消费

拉取消息的请求都在pullRequestQueue队列里&#xff0c; 拉取消息成功后设置下一次需要拉取的offset&#xff0c; boolean dispatchToConsume processQueue.putMessage(pullResult.getMsgFoundList()); 这个方法会把拉取回来的消息放进msgTreeMap里面 然后消费拉取回来的消…

MongoDB副本集成员如何复制新数据

复制是指在多台服务器上保持相同的数据副本。MongoDB 实现此功能的方式是保存操作日志&#xff08;oplog&#xff09;&#xff0c;其中包含了主节点执行的每一次写操作。oplog 是存在于主节点 local 数据库中的一个固定集合。从节点通过查询此集合以获取需要复制的操作。 每个…

Solving Inverse Problems With Deep_Neural Networks – Robustness Included_

作者&#xff1a;Martin Genzel, Jan Macdonald, and Maximilian Marz期刊&#xff1a;preprint arXiv时间&#xff1a;2020代码链接&#xff1a;代码论文链接&#xff1a;论文 1 动机与研究内容 最近工作发现深度神经网络对于图像重构的不稳定(instabilities)&#xff0c;以…

记一次漏洞挖掘【网络安全】

漏洞信息 从CVE-2019-10999查看该CVE的基础信息得知&#xff0c;这是一个栈溢出漏洞&#xff0c;攻击者在已登录的情况下可以通过向wireless.htm发送一个超长的WEPEncryption参数导致栈溢出&#xff0c;从而执行任意命令攻击. 现在我们利用Shambles Desktop工具确定这个漏洞的…

单商户商城系统功能拆解23—用户标签

单商户商城系统&#xff0c;也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法&#xff0c;例如拼团&#xff0c;秒杀&#xff0c;砍价&#xff0c;包邮…

在Windows使用VSCode搭建嵌入式Linux开发环境

在Windows使用VSCode搭建嵌入式Linux开发环境 百问网已经制作好了完备的Ubuntu镜像&#xff0c;可以从这里下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1vw4VUV_Mvt0HXz8IC66ACg 提取码&#xff1a;iftb 我们也正在(2022.10.17开始)使用纯粹的Ubuntu环境开始…

孙宇晨2022釜山区块链周演讲:区块链是未来数字城市发展基石

据韩国媒体全球经济新闻10月27日报道&#xff0c;波场TRON创始人孙宇晨线上出席了2022 釜山区块链周&#xff08;Blockchain Week in Busan 2022&#xff0c;以下简称BWB 2022&#xff09;&#xff0c;并发表《 The Cities of Tomorrow》主题演讲。孙宇晨表示&#xff0c;“区块…

生产环境数据库表迁移实践集锦

数据库表迁移是开发者必须要掌握的一种能力&#xff0c;对中高级开发者来说更是如此。工作中随着公司业务不断发展、系统架构的慢慢调整演化&#xff0c;迁移数据库表是不可避免的。由于数据是公司最最核心的资产&#xff0c;所以对生产环境数据库表的迁移并不是谁都可以去实施…

Web服务器、Ftp服务器、DNS服务器搭建【高级路由协议与实验04-2】

上一篇自学练习了如何搭建web服务器 文章目录网络设置1.修改配置文件2.改成桥接模式访问外网3.选择网卡4.重启网卡一、web服务器补充&#xff1a;步骤1.安装httpd软件包2.将httpd服务设为开始自启动&#xff0c;并启动该服务3.查看httpd服务是否启动4.在防火墙开放80端口并查看…

小白学习spring第一天

第二章&#xff1a;Spring 第1节&#xff1a;概述 1.1 介绍 heap stack Spring是一个分层的Java SE/EE full-stack&#xff08;一站式&#xff09;轻量级开源框架&#xff0c;以 IoC&#xff08;Inverse Of Control&#xff1a;控制反转&#xff09;和 AOP&#xff08;Aspec…

力扣刷题day32|738单调递增的数字、714买卖股票的最佳时机含手续费、968监控二叉树

文章目录738. 单调递增的数字思路难点&#xff1a;遍历顺序难点&#xff1a;设置flag714. 买卖股票的最佳时机含手续费贪心思路难点968. 监控二叉树思路难点&#xff1a;如何隔两个节点放一个摄像头738. 单调递增的数字 力扣题目链接 当且仅当每个相邻位数上的数字 x 和 y 满…

常用算法———P I D控制算法(P I D三个参数的作用和两种P I D算法的代码实现)

如果有错误请及时指出&#xff0c;大家一起学习交流。 目录 一、PID的概述 二、PID三个参数的控制原理 1、P控制器 2、I控制器 3、D控制器 4、PID控制器 5、PID的数学公式 三、位置式PID和增量式PID的差别和代码实现 1、位置式PID和增量式PID的差别 2、位置式PID …

(附源码)计算机毕业设计SSM竞赛报名管理系统

&#xff08;附源码&#xff09;计算机毕业设计SSM竞赛报名管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

mindspore实现自定义CNN图像分类模型

一、数据集定义 使用mindspore.dataset中的ImageFolderDataset接口加载图像分类数据集&#xff0c;ImageFolderDataset接口传入数据集文件上层目录&#xff0c;每个子目录分别放入不同类别的图像。使用python定义一个create_dataset函数用于创建数据集&#xff0c;在函数中使用…

[C++基础]-初识模板

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、泛型编…