数据库专题(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子句。

锁机制

        锁机制,死锁

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Java基础揉碎]抽象类

目录 通过问题引出 介绍 关键点 细节 ​编辑 抽象类的最佳设计模式--模版设计模式 1.先用最容易想到的方法 2.分析问题&#xff0c;提出使用模板设计模式 通过问题引出 假如我们有个动物类, 动物都有eat吃的方法, 但是具体吃什么, 我们不知道, 因为是什么动物我们不知道…

Git版本控制

这是两个学习Git推荐必看的文档&#xff0c;第一个链接是Git的官方权威文档&#xff0c;第二个链接是国内程序员在开发中&#xff0c;总结的Git快速入门教程&#xff0c;掌握这个&#xff0c;也足够应付在工作中的场景。 Git权威书籍《ProGit》中文版https://gitee.com/progit…

jdk11中自定义java类在jvm是如何被查找、加载

yym带你了解jvm源码&#xff0c;openjdk11源码&#xff0c;java类jvm加载原理 jdk11中java类在jvm是如何被1查找、2加载 以下说明的是MiDept类是如何被java classloader 和 jvm加载步骤 上源代码 public static void main(String[] args) {Thread.currentThread().setName…

Python机器学习赋能GIS:地质灾害风险评价的新方法论

地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质灾害在世界范围内频繁发生。我国除滑坡灾害外&#xff0c;还包括崩塌、泥石流、地面沉…

k8s记录-基础配置1

1、基础yaml文件格式 1.1、namespace apiVersion: v1 kind: Namespace metadata:name: namelabels:name: namekubectl apply -f namespace.yaml 1.2、Service service示例 apiVersion: v1 kind: Service metadata:name: ilanni-httpd-svcnamespace: ilanni-namespace spec:…

【代驾+顺风车+货运】全开源双端APP代驾+顺风车+货运代驾小程序源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 一、详细介绍 系统是基于Thinkphpuniapp开发的&#xff0c;全开源未加密&#xff0c;这套源码可以拿回去自己做二开 后台用户端司机端 功能详情介绍&#xff1a; 车主实名认证&#xff0c;驾驶证认证&#xff0c;车…

大学生实习被企业坑了,教训比较深刻

帮实习生解决一些疑惑&#xff0c;所以出了一个视频&#xff0c;大家多多支持 实习途径 1 靠自己&#xff08;招聘平台投简历&#xff0c;大专及普通大学的选择&#xff09; 2 靠关系&#xff08;亲人、老师、朋友帮推荐&#xff0c;有关系就是好&#xff09; 3 靠校招&#xf…

ROS机器人入门第四课:话题通信

文章目录 ROS机器人入门第四课&#xff1a;话题通信一、话题通信概述&#xff08;一&#xff09;概念&#xff08;二&#xff09;作用 二、话题通信基本操作需求:分析:流程:&#xff08;一&#xff09;发布方解释一些关键的ROS函数和概念&#xff1a; &#xff08;二&#xff0…

力扣刷题44-46(力扣0062/0152/0198)

62. 不同路径 题目描述&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff0c;机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径&#xff1f; 思路&#xff1a; 其实就是问(0,0)->(m-1,n-1)一共有几条路。 第一个…

office办公技能|word中的常见使用问题解决方案2.0

一、设置多级列表将表注从0开始&#xff0c;设置为从1开始 问题描述&#xff1a;word中插入题注&#xff0c;出来的是表0-1&#xff0c;不是1-1&#xff0c;怎么办&#xff1f; 写论文时&#xff0c;虽然我设置了“第一章”为一级标题&#xff0c;但是这三个字并不是自动插入的…

QMT量化交易上手

文章目录 QMT介绍基本使用代码初始化股票和行情交易量化策略示例相关链接QMT介绍 QMT是迅投公司出品量化交易客户端软件,目前只能运行在windows机器上,分为QMT 和 miniQMT两种模式,后者可以采用python API做程序化交易,极大方便了广大散户。这点上比同花顺/通信达好很多。…

软件推荐 篇三十七:安卓软件推荐IP Tools「IP工具」:全面解析网络状态与管理的必备神器

引言&#xff1a; 随着互联网的普及&#xff0c;网络已经成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐&#xff0c;我们都需要通过网络来进行各种操作。然而&#xff0c;网络问题的出现往往会给我们带来诸多困扰。为了更好地管理和优化网络&#xff0c;我们…

tomcat配置静态资源后无法正常访问

目录 一、场景二、配置三、访问异常四、排查五、原因六、解决 一、场景 1、将前端文件存在到指定目录 2、在tomcat配置静态资源 3、配置后无法正常访问到前端文件 二、配置 1、tomcat配置 2、静态资源 三、访问异常 四、排查 可以ping通&#xff0c;但是访问不了3080端口 …

rabbitmq 3.9.29 docker mac 管理员页面无法打开

SyntaxError: Unexpected token ‘catch’ SyntaxError: Unexpected token ‘catch’ at EJS.Compiler.compile (http://127.0.0.1:15672/js/ejs-1.0.min.js:1:6659) at new EJS (http://127.0.0.1:15672/js/ejs-1.0.min.js:1:1625) at format (http://127.0.0.1:15672/js/main…

程序员35岁会失业吗?【来自主流AI的回答】

程序员35岁会失业吗&#xff1f; 35岁被认为是程序员职业生涯的分水岭&#xff0c;许多程序员开始担忧自己的职业发展是否会受到年龄的限制。有人担心随着年龄的增长&#xff0c;技术更新换代的速度会使得资深程序员难以跟上&#xff1b;而另一些人则认为&#xff0c;丰富的经…

用BSP优化3D渲染

3D渲染引擎设计者面临的最大问题之一是可见性计算&#xff1a;只必须绘制可见的墙壁和物体&#xff0c;并且必须以正确的顺序绘制它们&#xff08;应该在远处的墙壁前面绘制近墙&#xff09; 。 更重要的是&#xff0c;对于游戏等应用程序来说&#xff0c;开发能够快速渲染场景…

【python】Jupyter Notebook 修改默认路径

文章目录 一、修改前&#xff08;一&#xff09;问题&#xff08;二&#xff09;修改前的默认路径 二、修改配置文件、更改路径&#xff08;一&#xff09;找到配置文件并打开&#xff08;二&#xff09;创建目标文件夹、得到新的路径&#xff08;三&#xff09;修改配置文件 三…

Android15功能和 API 概览

Android 15 面向开发者引入了一些出色的新功能和 API。以下部分总结了这些功能&#xff0c;以帮助您开始使用相关 API。 如需查看新增、修改和移除的 API 的详细列表&#xff0c;请参阅 API 差异报告。如需详细了解新的 API&#xff0c;请访问 Android API 参考文档&#xff0…

【Redis】数据类型、事务执行、内存淘汰策略

目录 数据类型 Redis事务执行步骤 步骤&#xff1a; redis内存淘汰策略 设置内存淘汰策略 1.设置配置文件 2.通过命令设置 数据类型 官网解释 Understand Redis data types | Redis 首先&#xff0c;Redis 的所有键都是字符串,常用的数据类型有 5 种&#xff1a;Strin…