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

前言

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

数据库基本概念

        本模块有参考:数据库基本概念-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子句。

锁机制

        锁机制,死锁

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java两地经纬度通过高德api获取两地距离(公里)

代码如下&#xff1a; String startLongitude entity.getLONGITUDE(); // 起点&#xff08;当前位置&#xff09;经度String startLatitude entity.getLATITUDE(); // 起点纬度String endLongitude entity.getLO(); // 终点经度String endLatitude entity.getLA(); …

Midjourney AI绘图工具介绍及使用

介绍 Midjourney是一款目前被誉为最强的AI绘图工具。只要输入想到的文字&#xff0c;就能通过人工智能产出相对应的图片。 官网只是宣传和登录入口&#xff0c;提供个人主页、订阅管理等功能&#xff0c;Midjourney实际的绘画功能&#xff0c;是在另外一个叫discord的产品中实…

计算机基础(中断、IO)

操作系统 设备交互 CPU 与 IO 设备交互过程 CPU 通过设备控制器&#xff08;驱动&#xff1f;&#xff09;与计算机外设进行交互。可以将控制器想象成编程语言中的接口&#xff0c;然后不同地计算机外设的控制器去实现这个接口&#xff0c;CPU 只需要调用接口而无需关注具体地…

记录三菱:Works2-计数器

参数设置&#xff1a;D200-D511掉电保持&#xff0c;这个范围可以更改 加减计数器 第一种&#xff1a; 第二种&#xff1a; 第三种&#xff1a; 例如&#xff1a;完成下面的功能 可以在触摸屏上仿真测试一下

unity学习(70)——编译游戏发生错误2

1.全屏问题其实无所谓&#xff0c;windows用tab可以切出来的。 2.现在主要问题是服务器try了以后虽然不崩溃了&#xff0c;但不再显示2个实例对象了&#xff0c;unity和exe此时都只能看到一个实例对象 2.1把之前报错位置的try-catch先注释掉 2.2 unity中此时登录666账号&…

2015年认证杯SPSSPRO杯数学建模D题(第二阶段)城市公共自行车全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 D题 城市公共自行车 原题再现&#xff1a; 城市交通问题直接影响市民的生活和工作。在地形平坦的城市&#xff0c;公共自行车出行系统是一种很好的辅助手段。一般来说&#xff0c;公共自行车出行系统由数据中心、驻车站点、驻车桩、自行车&…

【Linux】信号量与信号

目录 先导知识 信号量 信号 信号概念及产生信号的一般方式 进程递达、阻塞和捕捉 信号集操作函数 信号的捕捉 可重入函数 先导知识 信号量与信号没有任何关系&#xff0c;它们是两个完全不同的概念&#xff01; 操作系统的本质&#xff0c;就是一个死循环&#xff1b;…

Django日志(四)

一、Filters介绍 过滤器用于从logger传递给handler的哪些日志要做额外控制 默认情况下,满足日志级别的任何消息都将处理。只要级别匹配,任何日志消息都会被处理。不过,也可以通过添加 filter 来给日志处理的过程增加额外条件。例如,可以添加一个 filter 只允许某个特定来源…

【C++】模板与泛型编程

文章目录 1. 泛型编程2. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 3. 类模板3.1 类模板的定义格式3.2 类模板的实例化 4. 非类型模板参数5. 模板的特化5.1 概念5.2 函数模板特化5.3 全特化5.4 偏特化5.5 类模板…

Android 系统应用 pk8签名文件转jks或keystore教程

一、介绍 签名文件对于我们在做应用开发中&#xff0c;经常遇到&#xff0c;且签名文件不仅仅是保护应用安全&#xff0c;还会涉及到应用与底层之间的数据共享和API文件等问题。 在Android中&#xff0c;签名文件同样也存在这个问题。但是android中又区分系统应用和普通应用。系…

汉明校验·简明教程

汉明校验 一、简介 汉明码是由 Richard Hanming 于 1950 年提出的&#xff0c;它具有一位纠错能力。 新增的汉明码校验位数应满足如下关系&#xff1a; 2 k ⩾ n k 1 2^{k}\geqslant nk1 2k⩾nk1&#xff0c;其中k为校验位位数&#xff0c;n位数据位数。 二、汉明码生成 确…

centos7 的redis的安装

文章目录 查看本机redis⾸先安装 scl 源, 再安装 redis 基本配置启动redis停止redis 查看本机redis ⾸先安装 scl 源, 再安装 redis 安装scl源 yum install centos-release-scl-rh安装redis5 yum install rh-redis5-redis安装成功 基本配置 修改etc/redis/redis.conf 文件…

代码随想录算法训练营第二十一天(二叉树VII)| 530. 二叉搜索树的最小绝对差、501. 二叉搜索树中的众数、236. 二叉树的最近公共祖先(JAVA)

文章目录 530. 二叉搜索树的最小绝对差解题思路源码 501. 二叉搜索树中的众数解题思路源码 236. 二叉树的最近公共祖先解题思路源码 530. 二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&a…

如何在 Ubuntu 安装桌面环境

在 Ubuntu 上安装不同的桌面环境 如果你正在使用官方的 Ubuntu 发行版&#xff0c;它运行在 GNOME 上&#xff0c;那么你可以很容易地从默认的包管理器安装其他流行的桌面环境&#xff08;DE&#xff09;。让我们开始吧… 在 Ubuntu 上安装 KDE Plasma 如果你正在使用 GNOME…

JAVA使用POI实现Excel单元格合并-02

JAVA使用POI实现Excel单元格合并 实现效果 解释&#xff1a;只要是遇见与前一行相同的数据就合并 引入jar <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></depe…

第114讲:Mycat实践指南:按照单位为月的日期实现水平分表

文章目录 1.按月分片的概念1.按月分片的概念 2.按照天数对某张表进行水平拆分2.1.在所有的分片节点中创建表结构2.2.配置Mycat实现字符串按月分片的水平分表2.2.1.配置Schema配置文件2.2.2.配置Rule分片规则配置文件2.2.3.配置Server配置文件2.2.4.重启Mycat 2.3.写入数据观察分…

ora-00314 00312

背景&#xff1a;某医院数据库打不开&#xff0c;alter database open报错&#xff08;跟我说是被勒索了。。&#xff09; 查看日志组信息&#xff1a; select group#,sequence#,archived,status from v$log;处理方法&#xff1a; 若该组是非当前状态&#xff0c;而且未归档&…

Kubernetes Pod深度解析:构建可靠微服务的秘密武器(上)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Kubernetes概述 2、Pod概述 二、Po…

FastAPI+React全栈开发02 什么是FARM技术栈

Chapter01 Web Development and the FARM Stack 02 What is the FARM stack and how does it fit together? FastAPIReact全栈开发02 什么是FARM技术栈 It is important to understand that stacks aren’t really special, they are just sets of technologies that cover…

Python学习:条件控制

Python条件控制概念 条件控制是编程中的一个重要概念&#xff0c;用于根据不同情况执行不同的代码逻辑。在Python中&#xff0c;条件控制通常使用if语句来实现。if语句的基本语法如下&#xff1a; if 条件:执行语句 elif 其他条件:执行语句 else:执行语句其中&#xff0c;if…