MySQL基础篇第1章(数据库概述)

news2024/11/18 7:43:52

文章目录

  • 1、为什么要使用数据库
  • 2、数据库与数据库管理系统
    • 2.1 数据库的相关概念
    • 2.2 数据库与数据库管理系统的关系
    • 2.3 常见的数据库管理系统排名
    • 2.4 常见的数据库介绍
  • 3、MySQL介绍
    • 3.1 概述
    • 3.2 MySQL发展史重大事件
    • 3.3 关于MySQL 8.0
    • 3.4 Oracle VS MySQL
  • 4、RDBMS 与 非RDBMS
    • 4.1 关系型数据库(RDBMS)
      • 4.1.1 实质
      • 4.1.2 优势
    • 4.2 非关系型数据库(非RDBMS)
      • 4.2.1 介绍
      • 4.2.2 有哪些非关系型数据库
      • 4.2.3 NoSQL的演变
    • 4.3 小结
  • 5、 关系型数据库设计规则
    • 5.1 表、记录、字段
    • 5.2 表的关联关系
      • 5.2.1 一对一关联(one-to-one)
      • 5.2.2 一对多关系(one-to-many)
      • 5.2.3 多对多
    • 5.2.3 自我引用(Self reference)

1、为什么要使用数据库

在这里插入图片描述

2、数据库与数据库管理系统

2.1 数据库的相关概念

在这里插入图片描述

2.2 数据库与数据库管理系统的关系

数据库管理系统(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存
应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体用户的数据。
数据库管理系统、数据库和表的关系如图所示:

在这里插入图片描述

在这里插入图片描述

2.3 常见的数据库管理系统排名

目前互联网上常见的数据库管理软件有Oracle、MySQL、MS SQL Server、DB2、PostgreSQL、Access、Sybase、Informix这几种。以下是2021年DB-Engines Ranking 对各数据库受欢迎程度进行调查后的统计结果:(查看数据库最新排名: https://db-engines.com/en/ranking)

在这里插入图片描述
在这里插入图片描述
对应的走势图:(https://db-engines.com/en/ranking_trend)

在这里插入图片描述

2.4 常见的数据库介绍

  • Oracle
    1979 年,Oracle 2 诞生,它是第一个商用的 RDBMS(关系型数据库管理系统)。随着 Oracle 软件的名气
    越来越大,公司也改名叫 Oracle 公司。
    2007年,总计85亿美金收购BEA Systems。
    2009年,总计74亿美金收购SUN。此前的2008年,SUN以10亿美金收购MySQL。意味着Oracle 同时拥有了MySQL 的管理权,至此 Oracle 在数据库领域中成为绝对的领导者。
    2013年,甲骨文超越IBM,成为继Microsoft后全球第二大软件公司。
    如今 Oracle 的年收入达到了 400 亿美金,足以证明商用(收费)数据库软件的价值。

  • SQL Server
    SQL Server 是微软开发的大型商业数据库,诞生于 1989 年。C#、.net等语言常使用,与WinNT完全集成,也可以很好地与Microsoft BackOffice产品集成。

  • DB2
    IBM公司的数据库产品,收费的。常应用在银行系统中。

  • PostgreSQL
    PostgreSQL 的稳定性极强,最符合SQL标准,开放源码,具备商业级DBMS质量。PG对数据量大的文本以及SQL处理较快

  • SQLite
    嵌入式的小型数据库,应用在手机端。 零配置,SQlite3不用安装,不用配置,不用启动,关闭或者配置数据库实例。当系统崩溃后不用做任何恢复操作,再下次使用数据库的时候自动恢复。

  • informix
    IBM公司出品,取自Information 和Unix的结合,它是第一个被移植到Linux上的商业数据库产品。仅运行于unix/linux平台,命令行操作。 性能较高,支持集群,适应于安全性要求极高的系统,尤其是银行,证券系统的应用。

3、MySQL介绍

在这里插入图片描述

3.1 概述

在这里插入图片描述

3.2 MySQL发展史重大事件

MySQL的历史就是整个互联网的发展史。互联网业务从社交领域、电商领域到金融领域的发展,推动着应用对数据库的需求提升,对传统的数据库服务能力提出了挑战。高并发、高性能、高可用、轻资源、易维护、易扩展的需求,促进了MySQL的长足发展。

在这里插入图片描述

3.3 关于MySQL 8.0

MySQL从5.7版本直接跳跃发布了8.0版本 ,可见这是一个令人兴奋的里程碑版本。MySQL 8版本在功能上做了显著的改进与增强,开发者对MySQL的源代码进行了重构,最突出的一点是多MySQL Optimizer优化器进行了改进。不仅在速度上得到了改善,还为用户带来了更好的性能和更棒的体验。
在这里插入图片描述
为什么如此多的厂商要选用MySQL?大概总结的原因主要有以下几点:

  1. 开放源代码,使用成本低。
  2. 性能卓越,服务稳定。
  3. 软件体积小,使用简单,并且易于维护。
  4. 历史悠久,社区用户非常活跃,遇到问题可以寻求帮助。
  5. 许多互联网公司在用,经过了时间的验证。

3.4 Oracle VS MySQL

Oracle 更适合大型跨国企业的使用,因为他们对费用不敏感,但是对性能要求以及安全性有更高的要求。
MySQL 由于其体积小、速度快、总体拥有成本低,可处理上千万条记录的大型数据库,尤其是开放源码这一特点,使得很多互联网公司、中小型网站选择了MySQL作为网站数据库(Facebook,Twitter,YouTube,阿里巴巴/蚂蚁金服,去哪儿,美团外卖,腾讯)。

4、RDBMS 与 非RDBMS

从排名中我们能看出来,关系型数据库绝对是 DBMS 的主流,其中使用最多的 DBMS 分别是 Oracle、MySQL 和 SQL Server。这些都是关系型数据库(RDBMS)。

4.1 关系型数据库(RDBMS)

4.1.1 实质

这种类型的数据库是最古老的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的二元关系 (即二维表格形式)。

在这里插入图片描述

关系型数据库以 行(row) 和 列(column) 的形式存储数据,以便于用户理解。这一系列的行和列被称为表,一组表组成了数据库。

SQL 就是关系型数据库的查询语言。
在这里插入图片描述

4.1.2 优势

  • 复杂查询 可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
  • 事务支持 使得对于安全性能很高的数据访问要求得以实现。

4.2 非关系型数据库(非RDBMS)

4.2.1 介绍

非关系型数据库,可看成传统关系型数据库的功能阉割版本 ,基于键值对存储数据,不需要经过SQL层的解析, 性能非常高 。同时,通过减少不常用的功能,进一步提高性能。
目前基本上大部分主流的非关系型数据库都是免费的。

4.2.2 有哪些非关系型数据库

相比于 SQL,NoSQL 泛指非关系型数据库,包括了榜单上的键值型数据库、文档型数据库、搜索引擎和列存储等,除此以外还包括图形数据库。也只有用 NoSQL 一词才能将这些技术囊括进来。

  • 键值型数据库
    键值型数据库通过 Key-Value 键值的方式来存储数据,其中 Key 和 Value 可以是简单的对象,也可以是复杂的对象。Key 作为唯一的标识符,优点是查找速度快,在这方面明显优于关系型数据库,缺点是无法像关系型数据库一样使用条件过滤(比如 WHERE),如果你不知道去哪里找数据,就要遍历所有的键,这就会消耗大量的计算。键值型数据库典型的使用场景是作为 内存缓存 。 Redis 是最流行的键值型数据库。
    在这里插入图片描述

  • 文档型数据库
    此类数据库可存放并获取文档,可以是XML、JSON等格式。在数据库中文档作为处理信息的基本单位,一个文档就相当于一条记录。文档数据库所存放的文档,就相当于键值数据库所存放的“值”。MongoDB是最流行的文档型数据库。此外,还有CouchDB等。

  • 搜索引擎数据库
    虽然关系型数据库采用了索引提升检索效率,但是针对全文索引效率却较低。搜索引擎数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。核心原理是“倒排索引”。
    典型产品:Solr、Elasticsearch、Splunk 等。

  • 列式数据库
    列式数据库是相对于行式存储的数据库,Oracle、MySQL、SQL Server 等数据库都是采用的行式存储(Row-based),而列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的I/O,适合于分布式文件系统,不足在于功能相对有限。典型产品:HBase等。
    在这里插入图片描述

  • 图形数据库
    图形数据库顾名思义,就是一种存储图形关系的数据库。它利用了图这种数据结构存储了实体(对象)之间的关系。关系型数据用于存储明确关系的数据,但对于复杂关系的数据存储却有些力不从心。如社交网络中人物之间的关系,如果用关系型数据库则非常复杂,用图形数据库将非常简单。典型产品:Neo4J、InfoGrid等。

在这里插入图片描述

4.2.3 NoSQL的演变

由于 SQL 一直称霸 DBMS,因此许多人在思考是否有一种数据库技术能远离 SQL,于是 NoSQL 诞生了,但是随着发展却发现越来越离不开 SQL。到目前为止 NoSQL 阵营中的 DBMS 都会有实现类似 SQL 的功能。下面是“NoSQL”这个名词在不同时期的诠释,从这些释义的变化中可以看出 NoSQL 功能的演变 :

1970:NoSQL = We have no SQL
1980:NoSQL = Know SQL
2000:NoSQL = No SQL!
2005:NoSQL = Not only SQL
2013:NoSQL = No, SQL!

NoSQL 对 SQL 做出了很好的补充,比如实际开发中,有很多业务需求,其实并不需要完整的关系型数据库功能,非关系型数据库的功能就足够使用了。这种情况下,使用 性能更高 、 成本更低 的非关系型数据库当然是更明智的选择。比如:日志收集、排行榜、定时器等。

4.3 小结

NoSQL 的分类很多,即便如此,在 DBMS 排名中,还是 SQL 阵营的比重更大,影响力前 5 的 DBMS 中有4 个是关系型数据库,而排名前 20 的 DBMS 中也有 12 个是关系型数据库。所以说,掌握 SQL 是非常有必要的。整套课程将围绕 SQL 展开。

5、 关系型数据库设计规则

一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。
表具有一些特性,这些特性定义了数据在表中如何存储,类似Java和Python中 “类”的设计。

5.1 表、记录、字段

在这里插入图片描述

5.2 表的关联关系

表与表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。

四种:一对一关联、一对多关联、多对多关联、自我引用

5.2.1 一对一关联(one-to-one)

在这里插入图片描述

在这里插入图片描述

5.2.2 一对多关系(one-to-many)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.2.3 多对多

要表示多对多关系,必须创建第三个表,该表通常称为 联接表 ,它将多对多关系划分为两个一对多关系。将这两个表的主键都插入到第三个表中。

在这里插入图片描述

举例1:学生-课程
学生信息表 :一行代表一个学生的信息(学号、姓名、手机号码、班级、系别…)
选课信息表 :一个学生可以选多门课,一门课可以被多个学生选择
在这里插入图片描述

举例2:产品-订单
“订单”表和“产品”表有一种多对多的关系,这种关系是通过与“订单明细”表建立两个一对多关系来定义的。一个订单可以有多个产品,每个产品可以出现在多个订单中。
产品表 :“产品”表中的每条记录表示一个产品。
订单表 :“订单”表中的每条记录表示一个订单。
订单明细表 :每个产品可以与“订单”表中的多条记录对应,即出现在多个订单中。一个订单可以与“产品”表中的多条记录对应,即包含多个产品。

在这里插入图片描述
举例3:用户-角色
多对多关系建表原则:需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键。

在这里插入图片描述

5.2.3 自我引用(Self reference)

在这里插入图片描述

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

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

相关文章

java的void和Void

java 函数如果什么类型的值也不需要返回,用关键字void。 而Void是一个类,是一个不能实例化的占位符类,它持有对一个类对象的引用,这个类对象代表java关键字void。 如果函数返回值是Void,那么函数必须明确返回null。 J…

将 jar 构建成 docker 镜像实例

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

Java的数据结构

目录 数据结构: 1,数组 2,链表 3,哈希表 4,队列 5,堆 6,栈 7,树 8,图 数据结构: 1,数组 优点: 查找元素的速度很快; 按照索引来遍历数组的速度也很快。 缺点: 数组大小无法改变,一旦创建就无法扩容; 数组只能存储一种数据类型的数据; 插入、修改、删除时比较麻烦&…

1-软件测试答疑

目录 1.什么是软件测试? 1.1.生活中测试场景 1.2.软件测试定义 1.3.为什么要有软件测试?/重要性 1.4.练习:软件系统登录功能如何测试? 1.5.软件测试的特点 2.软件测试和开发的区别 2.1.工作内容 2.2.技能要求 2.3.难易程…

spring监视器actuator

引入依赖 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><…

第五章 神经网络与手写体识别

文章目录 第五章 神经网络5.1神经元模型5.2感知机与多层网络5.3误差逆传播算法5.4全局最小和局部最小5.5其他常见神经网络5.5.1RBF网络5.5.2ART网络5.5.3SOM网络5.5.4级联相关网络5.5.5Elman网络5.5.6Boltzmann机 5.6深度学习5.7实验&#xff1a;手写数字识别 第五章 神经网络 …

【QT】——QJson类的使用

目录 1.Json的格式 1.1.Json数组 1.2.Json对象 2.QJson 2.1 QJsonObject 2.2 QJsonValue 2.3 QJsonArray 2.4 QJsonDocument 3.示例 3.1 写操作 3.2 读操作 1.Json的格式 Json的基本概念 Json 是一种数据格式&#xff0c;和语言无关&#xff0c;在什么语言中都可以…

Host is not allowed to connect to this MySQL server

问题:win10 系统上运行node&#xff0c;运行提示&#xff1a;Host is not allowed to connect to this MySQL server。 在windows10上面装完MySQL8.0.28&#xff0c;发现本地可以使用Navicat进行连接 &#xff0c;但是在vue项目中调用node接口连接mysql却报错Host is not all…

Python学习笔记(十五)————文件操作相关

目录 1&#xff09;文件编码 2&#xff09; 文件的读取 ①open()打开函数 ② mode常用的三种基础访问模式 ③读操作相关方法 read()方法&#xff1a; readlines()方法&#xff1a; readline()方法&#xff1a;一次读取一行内容 for循环读取文件行 close() 关闭文件对象 wi…

simulink 结构体 bus creator

目录 结构体创建 bus creator 结构体引用Bus Selector 结构体赋值Bus Assignment 结构体对象 Bus 结构体数组打包Vector Concatenate 结构体数据存文件 结构体创建 bus creator 结构体引用Bus Selector 结构体赋值Bus Assignment 结构体对象 Bus 结构体数组打包Vector Co…

【MYSQL高级】Mysql找出执行慢的SQL【慢查询日志使用与分析】

分析慢SQL的步骤 慢查询的开启并捕获&#xff1a;开启慢查询日志&#xff0c;设置阈值&#xff0c;比如超过5秒钟的就是慢SQL&#xff0c;至少跑1天&#xff0c;看看生产的慢SQL情况&#xff0c;并将它抓取出来explain 慢SQL分析show Profile。&#xff08;比explain还要详细…

手搭手入门Spring boot+Mybatis+达梦数据库(国产数据库)

环境介绍 软件版本DM数据库dm8_20230418_x86_win_64IDEAIntelliJ IDEA 2022.2.1JDK1.8Spring Boot2.7.13mybatis2.3.1 达梦&#xff08;国产数据库&#xff09;可以将数据库名和表名自动转换为大写(注意&#xff01;&#xff01;创建达梦数据库实例的时候配置是否有勾选大小写…

Android Glide自定义AppGlideModule,让Glide在app启动后基于定制化GlideModule加载,kotlin

Android Glide自定义AppGlideModule&#xff0c;让Glide在app启动后基于定制化GlideModule加载&#xff0c;kotlin project的build.gradle: buildscript {repositories {maven {url uri("https://plugins.gradle.org/m2/")}}dependencies {classpath("org.jet…

Maven高级(二)--继承与版本锁定

一.继承 1.目的&#xff1a;不同模块中经常需要用到同一个依赖&#xff0c;这样要在每个pom.xml中都引入对应的坐标&#xff0c;继承可以用来解决依赖引入重复的问题。 2.实现&#xff1a;我们可以在创建一个父工程&#xff0c;然后将多个模块来继承这个父工程。然后再将各个模…

功能需求-前端在合同页面显示图片印章

需求描述 需要在项目中的合同页面的指定位置显示一个配置好的图片印章&#xff0c;实现好的效果&#xff0c;如下&#xff1a; 实现方案 使用使用CSS的绝对定位position来实现&#xff0c;代码如下&#xff1a; <div id"FatherBuyer"><img :src"s…

SpringAOP切面是否可以改变被代理方法的返回类型?

SpringAOP切面能不能改变被代理方法的返回类型&#xff1f; 注意&#xff0c;这里的AOP使用的aspectjweaver <!--AOP核心依赖aspectjweaver--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId></de…

【C++】 Qt-线程进程

文章目录 进程&#xff08;process&#xff09;线程&#xff08;Thread&#xff09;创建线程 进程&#xff08;process&#xff09; 在任务管理器中能看到进程Tab页下&#xff0c;将所有进程分为三类&#xff1a; 应用&#xff1a;打开的正在运行的软件。后台进程&#xff1a…

STM32寄存器点亮LED灯

一&#xff1a; 如何寄存器点灯 1&#xff1a;看单片机的原理图 找到LED灯 这个灯是 PB5引脚 看原理图可以看出 让GPIOB5输出低电平 就能点亮那么我们得让打开控制GPIOB5的时钟让GPIOB5 输出模式让GPIOB5低电平 二&#xff1a;看中文参考手册配置寄存器 2.1&#xff1a;打开管…

python与深度学习——基础环境搭建

一、安装jupyter notebook Jupyter Notebook是一个开源的交互式笔记本环境&#xff0c;可以用于编写和执行代码、创建可视化效果、展示数据分析结果等。我们在这里用它实现代码运行和观察运行结果。安装jupyter notebook实质上是安装Anaconda,后续还要在Anaconda Prompt中使用c…

AI视频智慧安监平台EasyCVR每次重启服务短时间播放后又无法播放,是什么原因?

EasyCVR视频融合平台基于云边端智能协同架构&#xff0c;具有强大的设备接入、视频汇聚管理、全网分发、按需调阅、鉴权播放、智能分析等视频能力与服务。平台开放度高、兼容性强、可支持灵活拓展与第三方集成。 有用户反馈&#xff0c;EasyCVR每次重启服务后&#xff0c;可以短…