数据库专题(基础)

前言

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

数据库基本概念

        本模块有参考:数据库基本概念-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。
    
    右外连接

锁机制

        锁机制,死锁

总结

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

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

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

相关文章

Pake一键打包,轻松构建桌面级应用!

Pake&#xff1a;顷刻之间&#xff0c;智能封装——WEB到桌面瞬间联通&#xff0c;让网站应用像搭积木般部署 - 精选真开源&#xff0c;释放新价值。 概览 Pake&#xff0c;作为一款新颖且极具创新性的桌面应用开发框架&#xff0c;凭借其独特的技术路径和高效的实现方式&…

【python】flask请求钩子,主动抛出异常与异常捕获

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

头部银行 AI 落地实践|数据应用赋能经营管理闭环

数据要素在银行各业务领域和流程中发挥着至关重要的作用&#xff0c;面对激烈的市场竞争和客户需求&#xff0c;银行越来越注重从数据管理中寻求效益和增值&#xff0c;深入洞察市场动态和客户需求&#xff0c;从而优化其产品与服务&#xff0c;提升运营效率和市场营销的成效。…

《妈妈是什么》笔记(二) 让孩子自己做选择

经典摘录 孩子也会需要独立的空间做事情&#xff0c;求独立、求空间、求私隐 对于不管因为什么&#xff0c;别人在受到肯定和赞赏的时候&#xff0c;会对我们自己的心理带来因“比较”而产生的不适感甚至嫉妒感&#xff0c;进而在行为上影响了我们自己的节奏&#xff0c;产生一…

RabbitMQ是怎么做消息分发的?

标题RabbitMQ是怎么做消息分发的&#xff1f; RabbitMQ一共有6中工作模式&#xff08;消息分发模式&#xff09;&#xff0c;分别是简单模式、工作队列模式、发布订阅模式、路由模式、主题模式、以及RPC模式。 简单模式是最基本的工作模式&#xff0c;也是最简单的消息传递模…

[Java、Android面试]_11_线程的启动方式和区别

文章目录 1. 继承Thread类2. 实现Runnable接口3. 实现Callable接口4. 使用Executor框架4. 四者的区别 本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于…

DXP学习2- 绘制电气图【实验】

目录 一、实验目的 二、实验原理 1、创建一个新的项目文件。 2、新建原理图文件 3、设置原理图选项 4、放置元器件 5、其他电路元素的放置 6、对所有电路元素属性参数值的修改 三、实验设备 四、实验内容 1、绘制实验图2-1 元器件所在位置&#xff1a; 1&#xff0c;…

炒伦敦金大师级的交易技术

交易中的反身性由投资大师索罗斯提出&#xff0c;简单来说&#xff0c;它所描述的是投资者与市场之间那种奇妙的互动和互相影响的关系。大家可以把伦敦金市场趋势&#xff0c;想象成一个很大的舞台&#xff0c;它会影响和决定投资者的心理预期和决策。 而投资者的心理预期和决策…

【C++】Qt:WebSocket客户端示例

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍WebSocket客户端示例。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&…

k8s-kubectl命令详解、Pod创建过程、Pod的生命周期、定制Pod、资源对象文件

集群管理 一、如何管理集群 kubectl是用于管理Kubernetes集群的命令行工具 二、语法格式&#xff1a; kubectl [command] [TYPE] [NAME] [flags] command&#xff1a;子命令&#xff0c;如create&#xff0c;get&#xff0c;describe&#xff0c;delete type&#xff1a;…

redis集群数据一致性如何保证?

一般的做法是对key进行hash&#xff0c;比如有4台机器&#xff0c;就对4取模。 这样的坏处是增加或者减少机器的时候&#xff0c;会有大量数据进行迁移。 业界做法是用一致性哈希算法&#xff0c;将机器节点的ip值&#xff0c;对一个很大的数取模比如2^32&#xff0c; 用一个…

Prometheus 配置Basic auth认证

官方配置说明&#xff1a; Basic auth | Prometheus 一、生成密码加密串 Prometheus于2.24版本&#xff08;包括2.24&#xff09;之后提供Basic Auth功能进行加密访问&#xff0c;在浏览器登录UI的时候需要输入用户密码&#xff0c;访问Prometheus api的时候也需要加上用户密…

优质的短效HTTP代理具备什么优点?

随着网络时代的蓬勃发展&#xff0c;数据的获取与处理成为了企业决策和市场竞争的关键。在这场数据的角逐中&#xff0c;优质的短效HTTP代理脱颖而出&#xff0c;备受业界瞩目。优质的短效HTTP代理&#xff0c;提供了稳定的网络连接和匿名性&#xff0c;更为数据采集提供了关键…

Echarts组件初步封装

一、业务场景&#xff1a; 最近在vue中使用echarts时 有多处需要用到各种图表&#xff0c;想着自己封装一个便于多次复用 为了避免大家走弯路&#xff0c;为大家整理了一下&#xff0c;粘走可以直接用的那种 二、具体实现步骤&#xff1a; 1、先在终端安装echarts npm install…

管理类联考–复试–英文面试–问题--规划介绍原因做法--纯英文版

借鉴 https://www.bilibili.com/video/BV1Dk4y187zN/?p4&spm_id_from333.880.my_history.page.clickhttps://www.bilibili.com/video/BV1Dk4y187zN/?p4&spm_id_from333.880.my_history.page.click https://ttsreader.com/zh/https://ttsreader.com/zh/ 规划 视频版…

一文掌握Java动态代理的奥秘与应用场景

一、基本概念 为某个对象提供一个代理&#xff0c;以控制对这个对象的访问。代理类和委托类有共同的父类或父接口&#xff0c;这样在任何使用委托类对象的地方都可以用代理对象来替代。代理类负责请求的预处理、过滤、将请求分派委托类处理、以及委托类执行完请求后的后续处理。…

中国软件评测中心发布《健康软件安全白皮书》,美创参编分享方案实践

日前&#xff0c;中国软件评测中心网络安全和数据安全研究测评事业部发布《健康软件安全白皮书》研究成果&#xff0c;美创科技深度参与此次白皮书编写工作&#xff0c;针对健康软件目前面临的安全风险&#xff0c;分享数据安全建设思路。 白皮书详细剖析健康软件面临的网络和数…

盲盒抽卡机小程序:探索神秘盲盒,尽享抽卡乐趣

在盲盒文化的热潮中&#xff0c;盲盒抽卡机作为一种深受大众喜爱的娱乐形式&#xff0c;正逐渐成为市场上的新宠。为了满足广大盲盒爱好者和抽卡玩家的需求&#xff0c;我们积极投身于盲盒抽卡机小程序的开发&#xff0c;旨在通过创新的技术手段&#xff0c;为用户带来全新的盲…

PyTorch出现:RuntimeError: An attempt has been made to start a new process...报错

1.查看显卡&#xff1a; 第一步&#xff1a;同时按下键盘的winr键&#xff0c;输入cmd 第二步&#xff1a;随后输入 nvidia-smi 2.查看下载安装的包&#xff1a; conda list conda list 3.问题报错 PyTorch出现&#xff1a;RuntimeError: An attempt has been made to …

解决vue3中刷新浏览器页面的axios请求状态变为canceled

最近在开发中要加一个悲观锁的功能&#xff0c;具体需求是&#xff1a;用户1和用户2不能同时打开一个模型进行编辑&#xff0c;用户1优先进入模型后&#xff0c;要对该模型进行上锁&#xff0c;关闭该模型或刷新页面时要进行解锁&#xff0c;此时在刷新页面时出现了问题。 刷新…