数据库专题(oracle基础和进阶)

news2024/11/25 14:44:04

前言

        本专题主要记录自己最近学的数据库,有兴趣一起补习的可以一起看看,有补充和不足之处请多多指出。希望专题可以给自己还有读者带去一点点提高。

数据库基本概念

        本模块有参考:数据库基本概念-CSDN博客

        数据库管理系统是一个由互相关联的数据的集合和一组用访问这些数据的程序组成,这个数据集合通常称作数据库,其中包含了关于某个企业的信息。DBMS的主要目标就是提供一种可以方便高效的存取数据库信息的途径。

        数据库由数据和表组成。主流数据库:​SQL Server、Oracle、DB2 MySQL。

        关系数据库系统是基于关系模型的数据库系统​,关系模型的数据结构使用简单易懂的二维数据表​。非关系数据库也被称作NoSQL (Not Only SQL),存储数据不以关系模型为依据,不需要固定的表格式。

        数据库对象包含表,视图,索引结构,用户,存储过程,触发器,函数。

数据库设计

        本模块有参考:数据库 之数据库设计浅知识 -- 设计概述、概念结构设计(E-R模型概述)、逻辑结构设计(函数依赖和范式)、物理结构设计_数据库概念架构设计、逻辑结构设计、物理结构设计-CSDN博客

        包含概念结构设计、逻辑结构设计、物理结构设计。

        数据库设计的目标是为用户和各种应用系统提供一个信息基础设施和高效率的运行环境。

        数据库设计的特点:结构和行为分离的设计。

        设计方法,新奥尔良(New Orleans)方法,基于E-R模型的数据库设计方法3NF(第三范式)的设计方法,面向对象的数据库设计方法,统一建模语言(UML)方法。

        设计的步骤,需求分析,设计概念结构,逻辑结构,物理结构,物理实现,使用和维护。

约束

        本模块有参考:Oracle中的约束-CSDN博客

        是一种用于限制表中数据的规则,它可以保证表中数据的完整性和一致性。约束通常会定义在表的列上,用于限制该列中的数据满足特定的条件,例如唯一性、非空、主键、外键等。

        作用:保证数据的完整性,保证数据的一致性,提高数据的查询效率,避免数据的错误和丢失。

主键约束

       用于保证表中每个记录的唯一性,通常会将主键定义为表中的一个列或多个列的组合。主键约束可以确保表中每个记录都有一个唯一的标识符,常用于定义基本表的主键,起唯一标识作用,其值不能为null,也不能重复,以此来保证实体的完整性。

      对于指定为primary key的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于unique所约束的唯一键,则允许为空。不能为同一个列或一组列既定义unique约束,又定义primary key约束。

注意: 

1.主键约束要求每个行都具有唯一标识符,因此主键列不能包含 NULL 值。
2. 主键约束可以涵盖多个列,但通常只有一个列被用作主键。
3. 定义主键时应该选择一个短、有意义且易于记忆的列名。
4. 主键列应该是简单的数据类型,如整数或字符串。
5. 主键列的值应该稳定,不应该经常更改。
6. 主键约束自动创建唯一索引,因此在选择主键列时应该考虑索引的效率和性能。
7. 在使用主键约束时,应该避免使用复杂的查询和连接操作,以提高查询效率。
8. 在插入数据时,应该确保主键列的值是唯一的,否则会触发主键冲突错误。
9. 在更新数据时,应该避免更改主键列的值,否则会破坏主键约束。
10. 在删除数据时,应该确保不会删除包含主键约束的行,否则会触发主键冲突错误。

唯一约束

        用于指明基本表在某一列或多个列的组合上的取值必须唯一,保证表中某个列的值是唯一的,但是允许空值,同时系统为保证其唯一性,最多只可以出现一个null值。唯一约束可以确保表中某个列的值不重复。
       定义unique约束的哪些列称为唯一键,系统自动为唯一键建立唯一索引,从而保证了唯一键的唯一性。unique既可用于列约束,也可用于表约束。

非空约束

        用于保证表中某个列不允许为空值。非空约束可以确保表中某个列的值不为空。
null值不是0也不是空白,更不是填入字符串“null”,而是表示“不知道”、“不确定”或“没有数据”的意思。当某一字段的值一定要输入才有意义的时候,则可以设置为not null。如主键列就不允许出现空值,否则就失去了唯一标识一条记录的作用

外键约束

        用于建立表与表之间的关联关系,保证表之间的关系完整。会用于强制参照完整性,提供单个字段或者多个字段的参照完整性,通常会将外键定义为一个表中的列,该列引用另一个表中的主键列。其中,包含外部键的表称为从表(参照表),包含外部键所引用的主键或唯一键的表称主表(被参照表)。

        外部键约束 foreign key约束指定某一个列或一组列作为外部键,系统保证从表在外部键上的取值要么是主表中某一个主键值或唯一键值,要么取空值。以此保证两个表之间的连接,确保了实体的参照完整性。

检查约束

        用于限制某个列的取值范围,可以使用SQL表达式来定义检查约束。检查约束可以确保表中某个列的值符合特定的条件。比如,一个字段只能输入整数,而且限定在0-100的整数,以此来保证域的完整性。当执行insert语句或者update语句时,检查约束将验证数据。

禁用约束

        用于禁用某个约束,通常用于临时关闭约束以提高性能或进行数据维护。禁用约束可以使用ALTER TABLE语句来实现。具体步骤如下:

1. 使用ALTER TABLE语句,将要禁用约束的表的名称作为参数。
2. 在表名后面添加DISABLE CONSTRAINT子句,指定要禁用的约束名称。
3. 执行该ALTER TABLE语句,即可禁用指定的约束。

默认约束

        用于设置表中某个列的默认值,当插入数据时,如果没有指定该列的值,则默认使用该约束定义的值。默认值可以算做一个约束,因为语法和创建约束差不多。默认值约束并不会限制什么,当没有给他值的时候,就会默认给你一个值。

条件约束

        用于在特定条件下启用或禁用约束,可以使用条件约束来限制数据的插入、更新和删除操作,只有符合指定条件的数据才能被执行操作。常见的条件约束有CHECK约束和WHERE子句约束。

应用到表中的所有列约束

        一是用于保证表中所有列的值都是唯一的,但允许空值存在。二是用于限制表中所有列的取值范围或满足一定的条件。

约束的使用:

        alter table st1 add primary key(deptno)   增加约束

        alter table st1 rename constraint st2 to qwer; 约束重命名                                           

        create table emp100 as select * from emp;

        alter table emp100 add primary key(empno);   删除约束

规范化

        第一范式、第二范式,第三范式,BCNF

        第一范式:每个列都不可以再拆分。第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。

        范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。第二范式:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。第三范式:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF。

        第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。。

事物

        四大特性(原子性,一致性,隔离性,持久性),隔离级别(PR,RC,RU,串行化)

        (1)原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。(2)一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态(3)隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,(4) 持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。或者这样理解:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

表连接*

        inner join,left join,right join,full join,cross join。

        表连接实际指多表连接查询。基本语法如下:

        select student.studentID,name,score.CourseID,cname,grade from student,course,score 
where student.studentID=score.studentID AND course.courseID=score.courseID AND grade >=60;


    其中student.studentID=score.studentID AND course.courseID=score.courseID 是三张表的连接条件,grade >=60是条件。
    表与表之前的这种连接查询是最传统的多表连接查询方式,可以把多个表连接起来,以满足复杂报告的需要。根据是否包含相关联的表中的
    匹配行和非匹配行,查询中的连接条件又分为内连接、外连接、自然连接。

    JOIN格式如下:
    SELECT column_list
    FROM table_name1 [join_type] JOIN table_name2 ON connection_condition
        [[join_type] JOIN table_name3 ON connection_condition[...]]
    where search_condition

    连接类型:
    [joint type] JOIN
    内连接:INNER JOIN
    外连接:[LEFT|RIGHT|FULL]OUTER JOIN
    交叉连接:CROSS JOIN

    ON 关键字后面是连接条件,与简单查询中写where关键字后面的连接条件相同。

内连接查询

       内连接是最常用的连接查询,一般常用INNER JOIN 关键字来指定内连接。INNER 可以省略。所谓内连接是指查询结果中包含满足连接条件的记录。当未指明链接类型时,默认为内连接。查询结果只包含两个表中相匹配的行。内连接可以分为等值内连接,不等值内连接和自然连接。

等值内连接

    等值内连接是在ON后面给出的连接条件中使用等号(=)运算符比较被连接的两张表的公共字段,其中=查询结果中只包含两张表的公共字段值相等的行,
    列可以是两表中的任意列。
    例1:scott 用户登录数据库,基于emp表和dept表,查询雇员工资大于2000的雇员编号
    姓名、工资、所在部门编号、部门名称。


    SELECT empno,ename,sal,e.deptno,dname
    FROM emp e INNER JOIN dept d ON e.deptno=d.deptno 
    WHERE SAL>2000


    
    例2:查询选修了数据库原理课程且成绩在80分以上的学生的学号、姓名、课程名称和成绩。


    SELECT s.studentID,sname,cname,grade,
    FROM student s JOIN score sc ON s.studentID=sc.studentID
        JOIN course c on sc.courseID=c.courseID
    WHERE canme='数据库原理' AND grade>80;


    
    不等值内连接
    不等值内连接是在连接条件中使用除“=”运算符以外的其他比较运算符比较被连续的公共字段。运算符包括 >,>=,<,<=,!>,!<,<> 。
    不等值内连接查询在实际应用中使用得较少。
    
    自然连接
    是一种特殊的等值内连接,他是由系统根据两表的同名字段自动等值比较的内连接,因此不需要用ON关键字指定连接条件。在使用自然连接
    时需要注意两表的同名字段不能用表明进行限制。因为进行的是等值比较,查询的结果集中同名字段的值完全一样的,所以如果在SELECT后面
    使用*号,那么在查询结果集中系统只包含一列同名字段和他的值。


    SELECT empno,ename,sa,deptno,dname
    FROM emp NATURAL JOIN dept
    WHERE SAL>2000;

外连接查询

    内连接查询是保证查询结果集中的所有行都要满足连接条件,而使用外连接查询时,它返回的查询结果集中不仅包含符合连接条件的行,而且还
    包含连接运算符左边的表(左表,左外连接时)或右边的表(右表,右外连接时),或两个连接表(完全外连接时)中的不符合连接条件的行。
    
    左外连接
    左外连接的结果集中包括两表连接后满足ON后面指定的连接条件的行(也就是内连接的结果集)和LEFT OUTER JOIN子句中指定的左表中不满足条件的行。
    也就是说左表中所有的行都会出现在查询的结果集中。如果左表的某行在右边中没有匹配行(即不满足条件的行),则这些相关联的记过集中右边的所有
    选择列均为NULL。
    例1
    查询每个部门包括的雇员,如某部门没有雇员,也要显示其情况。要求显示部门名称、雇员名字


SELECT dname,ename
FROM dept LEFT JOIN emp ON dept.deptno = emp.deptno;


    要求显示所有部门的名称,如果使用左外连接,那么部门信息表(dept表)应放在关键字LEFT JOIN左边。
    oracle数据库中使用特有的传统方法也可以实现两个表的左外连接,格式如下:


    FROM 表1,表2
    WHERE 表1.公共字段=表2.公共字段(+)


    
    注意,左外连接中(+)符号要在等号的右边,此时会将等号左边表中的所有列显示出来,等号右边表中只显示满足连接条件的行。


    SELECT dname,ename
    FROM dept,emp
    WHERE dept.deptno=emp.deptno(+);


    
2.右外连接(RIGHT JOIN)或(RIGHT OUTER JOIN)
   右外连接是左外连接的反向连接,将返回两表内连接的结果集和右边中不匹配的行。也就是返回RIGHT JOIN 关键字右边表中的所有行。
如果某行在左表中没有匹配行,则将为左表返回NULL。
    上面的可例子为:


    SELECT dname,ename
    FROM emp RIGHT OUTER JOIN dept ON  dept.deptno=emp.deptno;


    
    或者


    SELECT ename,dname
    FROM  emp,dept
    WHERE emp.deptno=deptno(+);


    
3.完全外连接(FULL JOIN )或(FULL OUTER  JOIN)
    完全外连接查询的结果包括两个表内联的结果集和左表与右表中不满足条件的行。当某行在另一表中没有有匹配行时,则另一个表的选择列为NULL。
即两个表的所有行都将被返回。


    SELECT ename,dname
    FROM emp FULL OUTER JOIN  dept
    ON emp.deptno=dept.deptno;


    Oracle的传统方法不支持两个表的完全连接,因为一个关系运算符最多一个+符号。
    
交叉连接
    交叉连接(CROSS JOIN)是用左表中的每一行与右表中的每行进行连接,不能使用ON关键字。因此结果集中的行数是左表的行数乘以右表的行数,该
连接查询的全集就是两个表的笛卡尔乘积。


    SELECT *
    FROM emp CROSS JOIN dept;


    没有ON关键字,但可以使用where子句。

锁机制

        锁机制,死锁

总结

        本文主要介绍数据库的基本概念和名词,重点讨论表连接的部分,深入理解和实际会用很关键。

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

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

相关文章

Arduino+ESP8266+华为云物联网平台实现智能开关

前言 最近在做一个物联网项目&#xff0c;涉及到智能开关的开发。目前已经实现简单的TCP通信远程控制&#xff0c;但是考虑到后期的设备管理以及设备通信所需要的技术和服务器的维护成本&#xff0c;我决定将设备接入云平台。本文将详细阐述如何利用华为云的物联网平台&#x…

Linux系统下安装部署Linux管理面板1panel

目录 一 1panel介绍 1、1Panel简介 2、1Panel特点 二、本地环境规划 1、本此实验目的 2、本地环境部署 三、部署1Panel&#xff08;在线安装&#xff09; 1.创建安装目录 2.一键部署1Panel 3.检查1Panel服务运行状态 4.检查1Panel监听端口 四、关闭防火墙和selinux…

小动物主动跑轮和被动跑轮的功能和目的?

小动物主动跑轮和被动跑轮在运动方式、实验目的和设计构造方面上是有区别的。 运动方式不同。主动跑轮是由动物自主运动来推动跑轮转动的。这种设置可以真实地反映动物自发的运动情况。相对地&#xff0c;被动跑轮则是一种强迫运动的方式&#xff0c;通常由电机带动跑轮转动从…

视频生成Sora的全面解析:从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等

前言 真没想到&#xff0c;距离视频生成上一轮的集中爆发(详见《Sora之前的视频生成发展史&#xff1a;从Gen2、Emu Video到PixelDance、SVD、Pika 1.0》)才过去三个月&#xff0c;没想OpenAI一出手&#xff0c;该领域又直接变天了 自打2.16日OpenAI发布sora以来(其开发团队包…

基于yolov8安全帽检测的系统

基于yolov8安全帽检测的系统 项目描述&#xff1a; 安全头盔检测&#xff08;计算机视觉&#xff09; 1.自训练数据集1538张数据图片&#xff0c;进行标注&#xff0c;并进行100轮的训练&#xff0c;准确率达0.966 2.使用 Flask 和 Ultralytics YOLOv8 模型开发了一个 Web 应…

Matlab有限差分法求解狄利克雷(Dirichlet)边界的泊松(Poisson)问题,边界值为任意值

参考l链接&#xff1a; 有限差分法简介有限差分法-二维泊松方程及其Matlab程序实现弹性力学方程 有限差分法matlab,泊松方程的有限差分法的MATLAB实现 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% Matrix method for Poisson Equation …

景联文科技上新高质量大模型训练数据!

在过去的一年中&#xff0c;人工智能领域呈现出了风起云涌的态势&#xff0c;其中模型架构、训练数据、多模态技术、超长上下文处理以及智能体发展等方面均取得了突飞猛进的发展。 在3月24日举办的2024全球开发者先锋大会的大模型前沿论坛上&#xff0c;上海人工智能实验室的领…

[Linux]知识整理(持续更新)

前言 Linux的目录结构 Linux的目录结构是一个树型结构 Windows 系统可以拥有多个盘符, 如 C盘、D盘、E盘 Linux没有盘符这个概念, 只有一个根目录 /, 所有文件都在它下面 Linux路径的描述方式 第一章 基本命令 命令格式 例:ls –la /etc 说明: 1)个别命令使用不遵循…

照片尺寸怎么修改?高效快速处理方法

在分享照片到不同平台时&#xff0c;也需要符合不同尺寸要求&#xff0c;在不同场景中&#xff0c;应该如何修改图片尺寸呢&#xff1f;还有不同的证件类型有着不同的证件照尺寸要求&#xff0c;因此我们需要根据要求对证件照尺寸进行调整&#xff0c;接下来就介绍几个可以图片…

35.基于SpringBoot + Vue实现的前后端分离-在线考试系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统&#xff0c;采用SpringBoot Vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SpringBoot Vue技术的在线考试系统设计与实现管理工作系统…

Netty学习——源码篇6 Pipeline设计原理 备份

1 Pipeline设计原理 在Netty中每个Channel都有且仅有一个ChannelPipeline与之对应&#xff0c;它们的组成关系如下图&#xff1a; 通过上图可以看到&#xff0c;一个Channel包含了一个ChannelPipeline&#xff0c;而ChannelPipeline中又维护了一个由ChannelHandlerContext组成的…

HTTP工具类封装与http请求响应

一、前言 在Java web系统中经常需要与外部接口进行对接&#xff0c;比较多的方式就是是http的方式。在springboot中&#xff0c;我们可以直接使用封装的feign如&#xff1a;我们去请求微信的接口&#xff0c;定义一个client客户端&#xff0c;使用feign框架去请求就可以。但是…

全志A33编译踩坑!

领导给了个新sdk。然后开编。 编译的标准流程是这样 cd lichee ./build.sh config 这还得了&#xff0c;每次都选很烦&#xff08;虽然只需要选一次&#xff09;&#xff0c;于是新写法是这样 ./build.sh -p sun8iw5p1_android -k linux-3.4 -b evb 果断提示 ERROR: inv…

[深度学习]yolov8+streamlit搭建精美界面GUI网页设计源码实现三

【设计思路介绍】 为了使用YOLOv8和Streamlit搭建一个精美的界面GUI网页&#xff0c;你需要遵循几个关键步骤。以下是一个简化的流程&#xff0c;帮助你设计并实现这一目标&#xff1a; 1. 环境准备 安装YOLOv8 YOLOv8是一个先进的实时目标检测模型。你需要先下载并安装YOL…

Excel双击单元格后弹窗输入日期

Step1. 在VBE界面新建一个窗体(Userform1),在窗体的工具箱的空白处右键,选中添加附件,勾选Calendar control 8.0,即可完成日历的添加。 PS:遗憾的是, Office 64 位没有官方的日期选择器控件。唯一的解决方案是使用Excel 的第三方日历。 参考链接:How to insert calen…

2024最新最全Selenium自动化测试面试题!

1、什么是自动化测试、自动化测试的优势是什么&#xff1f; 通过工具或脚本代替手工测试执行过程的测试都叫自动化测试。 自动化测试的优势&#xff1a; 1、减少回归测试成本 2、减少兼容性测试成本 3、提高测试反馈速度 4、提高测试覆盖率 5、让测试工程师做更有意义的…

vue echarts 记录一个带tab切换的echarts页面 切换的时候如果有一个tab里的echarts没有数据 该如何清空echarts图的数据的问题

<template><div class"app-container"><el-form :model"queryParams" ref"queryForm" size"small" v-show"showSearch" label-width"85px"><el-form-item label"园所名称" prop&q…

Matlab从入门到精通课程

教程介绍 MATLAB是美国MathWorks公司出品的商业数学软件&#xff0c;用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人&#xff0c;控制系统等领域。 学习地址 链接&#xff1a;https://pan.baidu.com/s/1PxGarBwQusMzwPVqcE…

动态内存管理一一常见错误与习题练习

目录 前言 一、常见错误 1、对NULL指针的解引用操作 2、 对动态开辟空间的越界访问 3、对非动态开辟内存使用free释放 4、使用free释放一块动态开辟内存的一部分 5、对同一块动态内存多次释放 6、动态开辟内存忘记释放&#xff08;内存泄漏&#xff09; 二、习题练习…

一篇文章带你搞定接单的多种渠道,赶紧码住!!!

相信大家也看到了不少人通过网络接单实现年入30W&#xff0c;彻底财富自由&#xff01;咱看了&#xff0c;真的很难不心痒痒&#xff0c;想加入其中&#xff0c;大干一场&#xff01;毕竟搞钱嘛&#xff01;才是王道。但是呢&#xff0c;也有很多人心向往之&#xff0c;奈何不知…