关系数据库基础理论[通俗易懂]

关系数据库基础理论[通俗易懂]mysql系列之一关系数据库基础理论正是数据库管理的需要催生了数据库管理系统DBMS,而关系型数据库管理系统为RDBMS常见的数据模型有三种:-层次模型-网状模型-关系模型一、关系数据库的产生在DBMS出现之前,人们用文件来管理数据,但存在很多缺陷:1.数据冗余和不一致性。数据冗余表示在每个shell脚本中基本上都是/bin/bash,但很多用户使用…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

mysql系列之一关系数据库基础理论

正是数据库管理的需要催生了数据库管理系统DBMS,而关系型数据库管理系统为RDBMS

常见的数据模型有三种:
– 层次模型
– 网状模型
– 关系模型


一、关系数据库的产生

在DBMS出现之前,人们用文件来管理数据,但存在很多缺陷:
1. 数据冗余和不一致性。数据冗余表示在每个shell脚本中基本上都是/bin/bash,但很多用户使用的都是bash,那么这个可能出现多次,冗余量很大;不一致性,比如有一个数据在多个文件中都被使用,那么修改的时候,需要把每个文件都手动修改。
2. 数据访问困难。如果数据库有上千万行数据,那么我们使用时,需要把这上千万行数据全部载入内存中,再使用,对硬件的要求会很高而且载入时间很长,但其实我们需要比较的也只是那一行数据而已。
3. 数据孤立。由于数据保存在不同的文件里面,所以这些文件之间的格式可能各不相同,所以后续开发一个软件来管理的话非常困难,因为它们不满足某一个规范,使得数据之间是相互孤立的。
4. 完整性问题。例如两个转账的用户之间数额的总和应该是一样的,但如果在转账的过程中出现了问题,那么文件就无法解决,除非应用程序设计上解决,但应用程序本身并无法理解数据之间的逻辑问题。
5. 原子性问题。类似于完整性问题,数据必须从一个稳定的状态转换为另外一个稳定的状态。
6. 并发访问异常问题。按道理来讲,如果一个用户访问数据库文件的前十行,另一个用户访问最后十行,本身他们俩并不会冲突,但如果某个用户需要修改的话,另外一个用户并不能访问。因为为了保证文件的完整性,我们会加锁的,但文件级别的锁安全性太高,并不适合这种访问。
7. 安全性问题。部分访问授权很难实现,很难使某一个用户只能看到其中指定的某些字段。

因为这些问题,所以出现了关系数据库
1. 关系数据库想要解决数据冗余问题,它将每一个关系都看成了一个,每一列都看成是一个属性,每一行看成是他的一个元组(也就是数据)如果有许多相同值的话,它将具有相同字段的值独立出来,把一张表拆分成两张表,降低所谓的冗余度,这种关系也叫做E-R关系模型(实体关系模型)

  • 常见的关系模型(结构化数据模型)
    • 关系模型:用一张二维表来表示关系模型
    • 实体关系模型:将一张表拆分,让它们产生某种联系
    • 对象关系模型:存储一些比较大的文件如何存储呢?可以将一个比较大的文件先存储在数据库文件管理系统当中的某一个存储空间上,表中用一个指针指向这么某一个数据,把它当作一个存储对象来进行管理。
    • 半结构化数据模型:结构化是指每一行存储的都是一样的,比如/etc/passwd文件中,第一个字段为用户名,第二个为密码等。半结构化表示它并不是唯一的,可能第一行存储的是用户名和性别,第二行存储的是用户名和年龄这种,所以每一行存储不止存储它的数据,还存储它的标签。

2.关系:关系代数,支持代数运算,比如两个集合的交集、并集等。

二、SQL和关系型数据的结构

SQL:Structure Query Language(关系结构化语言)

1、sql分类

  • DML:数据操作语言,增删改查都是DML语句:INSERT、DELETE、UPDATE、SELECT
  • DDL:数据定义语言,实现数据对象的存储和定义。CREATE、DROP、ALTER
    • 关系数据库RDB的对象基本有:库、表、索引、视图、用户、存储过程、触发器、事件调度器等。
    • 实现数据定义时,必须考虑数据的约束关系。数据库需要能够自己检查出来有没有逻辑性的错误,所以建立的时候注意它的有效数据范围。
    • 域约束:数据类型的约束
    • 外键约束:引用完整性约束
    • 主键约束:某字段能唯一标识此字段所属的实体,并且不允许为空,一张表中只能有一个主键
    • 唯一性约束:每一行的某字段都不允许出现相同值,可以为空,一张表中可以有多个
    • 检查性约束:比如年龄只能时int型
  • DCL:数据控制语言。GRANT、REVOKE,用来定义数据库中用户的访问权限

2、关系型数据的结构

  • 表示层:表
  • 逻辑层:存储引擎,实现表和数据文件的解构
  • 物理层:数据文件
数据存储和查询
  • 存储管理器
  • 查询管理器
    负责接收用户查询,理解用户查询,并将用户的查询包括存储转换为对应的存储管理器可以理解的语句,存储管理器将数据存储到磁盘上或从磁盘上删除的这么一种组件

  • 存储管理器应该具有的组件(功能):权限及完整性管理器、事务管理器、文件管理器、缓冲区管理器

  • 查询管理器应该具有的组件(功能):DML解释器、DDL解释器、查询执行引擎

数据存储和查询的执行过程:
1. 查询管理器接收用户查询,并理解。使用DML和DDL解释器
2. 将DML和DDL解释器的结果给查询执行引擎
3. 查询执行引擎的结果给存储管理器
4. 存储管理器将操作写入磁盘中

这里写图片描述

mysql是单进程多线程的
mysql不允许一个进程为两个用户同时提供服务,比如一个用户请求访问某一个表,而第二个用户同时访问同样的数据,这两个请求不能使用同一个进程得到服务,原因是因该考虑是否两个用户对这个数据是否都有访问权限,如果其中一个没有,那么数据的安全性不能得到保障.

  • 单进程
  • 多线程

    • 守护线程:比如数据库将数据从缓冲区管理器写到磁盘上去,这个操作和应用没有任何关系,所以这些都是需要数据库本身来完成的.
    • 应用线程

    但因为数据库的请求很多时候需要的数据量是很大的,比如现在有十个用户同时对某个数据库访问,第一个用户需要载入256M的数据,第二个用户需要1G的数据等等.所以数据库通常是一个系统最慢的节点所在,应该尽量避免数据库的交互.那么应该怎么提高数据库的交互速度?

    • 缓存:第一次查询后保存缓存第二次访问时直接使用结果
    • 线程重用(thread reuse):一个用户退出之后,它的线程空闲下来之后不直接删除该线程,放在空闲线程池中,以后用户使用,直接用这个空闲的去响应它

三、关系运算

关系运算主要为了实现mysql语句的执行

  1. 投影:只输出指定属性
  2. 选择:只输出符合条件的行,类似于通过WHERE完成
  3. 自然连接:具有相同名字的所有属性上所有取值相同的行
  4. 笛卡尔积:不考虑表与表只见的关系,直接连接
  5. 并:和求并集相同

四、sql语言的组成部分

SQL语言的组成部分:DDL、DML、完整性定义语言(DDL的一部分功能)、视图定义、事务控制、嵌入式SQL和动态SQL、授权

使用程序设计语言如何与RDBMS交互
– 嵌入式SQL:与动态SQL类似,但是其语言必须在程序编译时完全确定下来,并由预处理器进行处理
– 动态SQL:程序设计语言使用函数(mysql_connect())或者方法与RDBMS服务器建立连接,并进行交互,通过建立连接向SQL服务器发送查询语句,并将结果保存至变量中而后进行处理。

五、mysql插件式存储引擎

mysql不同的存储引擎可以实现不同的功能
– 5.5.8之前,默认引擎为MyISAM
– 5.5.8之后,默认引擎为InnoDB
简单来讲,MyISAM不支持事务,而InnoDB支持事务。所以InnoDB更适合在线事务处理系统
这里写图片描述
数据库逻辑请求过程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181203.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux修改密码命令passwd_linux重置系统到刚安装状态

    linux修改密码命令passwd_linux重置系统到刚安装状态新建Linux系统修改密码一、首先,打开VMwareWorkstation软件,在自己的界面打开虚拟机二、打开虚拟机后在如下界面单击鼠标左键使鼠标“消失”,按上下键使界面停留在如下所示,白条停留在第一行,再点击“e”键三、单击“e”键后进入如下界面,在linux…quiet这段代码后,initrd之前输入“rd.break”,再按ctrl+x启动进入下一个界面四、在以上界面中依次输入mount-oremount,rw/sysr

    2025年9月22日
    5
  • 万文多图之搜索引擎使用教程[通俗易懂]

    万文多图之搜索引擎使用教程[通俗易懂]大家好,我是herosunly,985院校硕士毕业,现担任算法研究员一职。CSDN博客专家,2020年博客之星TOP。曾获得阿里云天池比赛第一名、科大讯飞比赛第一名、CCF比赛第一名等Top名次,拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法行业就业。其中经常被同学和同事夸赞的一项能力就是`搜索`,所以今天特意给大家分享搜索引擎使用方法,希望能对大家有所帮助。如果大家觉得有用,请帮忙点赞评论收藏(一键三连),谢谢大家的支持~

    2022年5月20日
    51
  • Java工程师自我评价(软件工程师自我评价)

    JAVA工程师简历自我评价无论在学习、工作或是生活中,我们都可能会使用到自我评价,自我评价具有重要的社会功能,它极大地影响人与人之间的交往方式。那要怎么写好自我评价呢?以下是小编收集整理的JAVA工程师简历自我评价,仅供参考,希望能够帮助到大家。JAVA工程师简历自我评价11、有较强的分析、解决问题的能力,具有较强逻辑思维能力和表达能力。2、性格开朗,积极乐观,能以极大的’热情投入工作。3、具…

    2022年4月15日
    47
  • 香农编码熵怎么算_香农范诺编码

    香农编码熵怎么算_香农范诺编码一、香农编码的概念概念:香农编码是是采用信源符号的累计概率分布函数来分配字码的。香农编码是根据香农第一定理直接得出的,指出了平均码长与信息之间的关系,同时也指出了可以通过编码使平均码长达到极限值。香农第一定理是将原始信源符号转化为新的码符号,使码符号尽量服从等概分布,从而每个码符号所携带的信息量达到最大,进而可以用尽量少的码符号传输信源信息。香农编码属于不等长编码,通常将经常出现的

    2025年10月22日
    0
  • pycharm 连接数据库报错[通俗易懂]

    pycharm 连接数据库报错[通俗易懂]pycharm连接数据库报错请问出现下面报错是什么原因呢,数据库已连接,运行后就这样了C:\Users\MACHENIKE\PycharmProjects\untitled9\venv\Scripts\python.exeC:/Users/MACHENIKE/PycharmProjects/untitled11/venv/Online-Bookstore-Management-System-master/v1.0/Book_informationUI.pyTraceback(mostrec.

    2022年8月25日
    5
  • Pycharm使用pyinstaller打包成64/32位通用exe

    Pycharm使用pyinstaller打包成64/32位通用exe网上大多数博客都是行不通的 在此记录一个可行的快捷方式 下载 32 位 python 安装包 点击安装 选择第二种自定义方式安装 默认 填写自己的安装路径 安装完成 PycharmSetti 设置 ShowAll 点击 选择 existingenvi 选择 Python32 位安装路径 设置好后需要安装 pyinstaller 库 点击右边 号 安装 pyinstaller 完成 回到项目 对报红缺失的依

    2025年7月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号