MySQL 1 数据库概述知识

news2024/11/15 21:35:32

一、数据库概述

1. 为什么要使用数据库

  • 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以“固化”,而持久化的实现过程大多通过各种关系数据库来完成。
  • 持久化的主要作用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。

 

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

2.1 数据库的相关概念

  • DB:数据库(Database)   即存储数据的“仓库”,其本质是一个文件系统。它保存了一系列有组织的数据。
  • DBMS:数据库管理系统(Database Management System)    是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据。
  • SQL:结构化查询语言(Structured Query Language)  专门用来与数据库通信的语言。

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

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

数据库管理系统、数据库和表的关系如图所示:

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

目前互联网上常见的数据库管理软件有OracleMySQLMS SQL ServerDB2PostgreSQLAccess、Sybase、Informix这几种。以下是2021DB-Engines Ranking 对各数据库受欢迎程度进行调查后的统计结 果:(查看数据库最新排名: DB-Engines Ranking - popularity ranking of database management systems

。。。 

 对应的走势图:(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 处理较快。
SyBase

 已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner

SQLite
嵌入式的小型数据库,应用在手机端。 零配置, SQlite3 不用安装,不用配置,不用启动,关闭或者配置数据库实例。当系统崩溃后不用做任何恢复操作,再下次使用数据库的时候自动恢复。
informix
IBM 公司出品,取自 Information Unix 的结合,它是第一个被移植到 Linux 上的商业数据库产品。仅运行于unix/linux 平台,命令行操作。 性能较高,支持集群,适应于安全性要求极高的系统,尤其是银行,证券系统的应用

3. MySQL介绍

 

3.1 概述

  • MySQL是一个 开放源代码的关系型数据库管理系统 ,由瑞典MySQL AB(创始人Michael Widenius)公司1995年开发,迅速成为开源数据库的 No.1
  • 2008Sun 收购(10亿美金),2009SunOracle 收购。 MariaDB 应运而生。(MySQL 的创造者担心 MySQL 有闭源的风险,因此创建了 MySQL 的分支项目 MariaDB
  • MySQL6.x 版本之后分为 社区版 商业版
  • MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
  • MySQL是开源的,所以你不需要支付额外的费用。
  • MySQL是可以定制的,采用了 GPLGNU General Public License协议,你可以修改源码来
  • 开发自己的MySQL系统。
  • MySQL支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持 4GB 64位系统支持最大的表文件为 8TB
  • MySQL使用 标准的SQL数据语言 形式。
  • MySQL可以允许运行于多个系统上,并且支持多种语言。这些编程语言包括CC++Python
  • JavaPerlPHPRuby等。

3.2 MySQL发展史重大事件

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

 

3.3 关于MySQL 8.0

MySQL 5.7 版本直接跳跃发布了 8.0 版本 ,可见这是一个令人兴奋的里程碑版本。 MySQL 8 版本在功能上做了显著的改进与增强,开发者对MySQL 的源代码进行了重构,最突出的一点是 MySQL Optimizer 优化器进行了改进。不仅在速度上得到了改善,还为用户带来了更好的性能和更棒的体验。

 

3.4 Why choose MySQL?

为什么如此多的厂商要选用 MySQL ?大概总结的原因主要有以下几点:
  • 1. 开放源代码,使用成本低。
  • 2. 性能卓越,服务稳定。
  • 3. 软件体积小,使用简单,并且易于维护。
  • 4. 历史悠久,社区用户非常活跃,遇到问题可以寻求帮助。
  • 5. 许多互联网公司在用,经过了时间的验证。

3.5 Oracle vs MySQL

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

 

4. RDBMS与非RDBMS

4.1 关系型数据库(RDBMS)

4.1.1 实质

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

 

关系型数据库以 (row) (column) 的形式存储数据,以便于用户理解。这一系列的行和列被
称为 (table) ,一组表组成了一个库 (database)
表与表之间的数据记录有关系 (relationship) 。现实世界中的各种实体以及实体之间的各种联系均用
关系模型 来表示。关系型数据库,就是建立在 关系模型 基础上的数据库。
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. 关系型数据库设计规则

  • 关系型数据库的典型数据结构就是 数据表 ,这些数据表的组成都是结构化的(Structured)。
  • 将数据放到表中,表再放到库中。
  • 一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。
  • 表具有一些特性,这些特性定义了数据在表中如何存储,类似JavaPython的设计。

5.1 表、记录、字段

  • E-Rentity-relationship,实体-联系)模型中有三个主要概念是: 实体集 属性 联系集
  • 一个实体集(class)对应于数据库中的一个表(table),一个实体(instance)则对应于数据库表中的一行(row),也称为一条记录(record)。一个属性(attribute)对应于数据库表中的一列column),也称为一个字段(field)。

ORM 思想 (Object Relational Mapping) 体现:
数据库中的一个表 <---> Java Python 中的一个类
表中的一条数据 <---> 类中的一个对象(或实体)
表中的一个列 <----> 类中的一个字段、属性 (field)

5.2 表的关联关系

  • 表与表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。
  • 四种:一对一关联、一对多关联、多对多关联、自我引用
5.2.1 一对一关联( one-to-one
  • 在实际的开发中应用不多,因为一对一可以创建成一张表。
  • 举例:设计 学生表 :学号、姓名、手机号码、班级、系别、身份证号码、家庭住址、籍贯、紧急联系人、...

拆为两个表:两个表的记录是一一对应关系。

  • 基础信息表 (常用信息):学号、姓名、手机号码、班级、系别
  • 档案信息表 (不常用信息):学号、身份证号码、家庭住址、籍贯、紧急联系人、...

两种建表原则:

  • 外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一。
  • 外键是主键:主表的主键和从表的主键,形成主外键关系。

5.2.2 一对多关系( one-to-many
  • 常见实例场景: 客户表和订单表 分类表和商品表 部门表和员工表

举例:

  1. 员工表:编号、姓名、...、所属部门
  2. 部门表:编号、名称、简介
  • 一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键

 

 

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

 

举例 1 :学生 - 课程
  • 学生信息表 :一行代表一个学生的信息(学号、姓名、手机号码、班级、系别...
  • 课程信息表 :一行代表一个课程的信息(课程编号、授课老师、简介...
  • 选课信息表 :一个学生可以选多门课,一门课可以被多个学生选择
学号        课程编号
1                 1001
2                 1001
1                 1002

 

举例 2 :产品 - 订单

“订单表和产品表有一种多对多的关系,这种关系是通过与订单明细表建立两个一对多关系来定义的。一个订单可以有多个产品,每个产品可以出现在多个订单中。

  • 产品表 产品表中的每条记录表示一个产品。
  • 订单表 订单表中的每条记录表示一个订单。
  • 订单明细表 :每个产品可以与订单表中的多条记录对应,即出现在多个订单中。一个订单可以与产品表中的多条记录对应,即包含多个产品。

 举例3:用户-角色

  • 多对多关系建表原则:需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键

 5.3.4 自我引用(Self reference)

 

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

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

相关文章

美妆SDK哪家便宜?

在今天的数字化时代&#xff0c;人工智能和机器学习正在改变我们的生活。特别是在美妆行业&#xff0c;这些技术的应用已经开始改变消费者的购物习惯和企业的营销策略。为了满足这个需求&#xff0c;美摄推出了一款美妆SDK&#xff0c;专为企业提供技术支持。一、美摄美妆SDK具…

简单聊聊低代码

在数字经济迅速发展的背景下&#xff0c;越来越多的企业开始建立健全业务系统、应用、借助数字化工具提升管理效率&#xff0c;驱动业务发展&#xff0c;促进业绩增长。在这一过程中&#xff0c;和许多新技术一样&#xff0c;低代码&#xff08;Low-code&#xff09;开发被推上…

c++视觉检测------Shi-Tomasi 角点检测

Shi-Tomasi 角点检测 &#xff1a;goodFeaturesToTrack() goodFeaturesToTrack() 函数是 OpenCV 中用于角点检测的功能函数。它的主要作用是检测图像中的良好特征点&#xff0c;通常用于计算机视觉任务中的光流估算、目标跟踪等。 函数签名&#xff1a; void goodFeaturesTo…

【C++14算法】exchange和quoted

文章目录 前言一、exchange函数1.1 exchange函数简介&#xff1a;1.2 函数原型1.3 示例代码示例1&#xff1a;替换整数对象示例2&#xff1a;替换字符串对象示例3&#xff1a;替换自定义类型对象示例4&#xff1a;替换指针对象 二、quoted函数2.1 简介&#xff1a;2.2 示例代码…

uniapp左滑列表删除

目录 效果index.vuedelSlideLeft.vuedelRightIconfont.css参考插件最后 效果 index.vue 使用页面 引入封装的页面delSlideLeft.vue <template><view class""><view v-for"(item, index) in busOrderList" :key"index" :data-in…

Python 单元测试设置

单元测试检查特定代码单元或模块是否按照开发人员的预期执行。 大多数时候&#xff0c;我们测试的代码单元是一个函数。 同样&#xff0c;我们可以测试所有功能。 作为最佳实践&#xff0c;至少在开发过程中&#xff0c;我们应该进行单元测试。 因此&#xff0c;在开发过程的…

k8s - Flannel

1.Flannel概念剖析 Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络&#xff08;Overlay Network&#xff09;工具&#xff0c;其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方…

MySQL系列索引专题

存储引擎 1.MySQL 的体系结构可以分为四层 连接层&#xff1a;最上层是一些客户端和链接服务&#xff0c;主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限服务层&#xff1a;第二层架构主要完成大多数的核心…

Redis实现简易消息队列的三种方式

Redis实现简易消息队列的三种方式 消息队列简介 消息队列是一种用于在计算机系统中传递和处理数据的重要工具。如果你完全不了解消息队列&#xff0c;不用担心&#xff0c;我将尽力以简单明了的方式来解释它。 首先&#xff0c;想象一下你正在玩一个游戏&#xff0c;而游戏中…

怎么把heic改成jpg?方法大全在这里

怎么把heic改成jpg&#xff1f;HEIC是一种现代的图像文件格式。它是由ISO制定的标准&#xff0c;并得到了苹果公司的支持和推广。与JPG等传统图像格式相比&#xff0c;HEIC格式可以提供更好的图像质量&#xff0c;并且占用更少的存储空间。这使得它在手机、平板电脑和其他移动设…

Java中在循环体内拼接字符串时为什么使用StringBuilder而不是String

在循环体内拼接字符串时为什么使用StringBuilder而不是String 在《阿里巴巴Java开发手册》一书中提到了&#xff1a; 循环体内&#xff0c;字符串的连接方式&#xff0c;请使用 StringBuilder 的 append 方法进行扩展。&#xff08;而不要用String的方式&#xff09; 说明&…

解决IP地址欺骗的网络安全策略

随着互联网的不断发展&#xff0c;网络安全已经成为企业和个人关注的重要问题。其中&#xff0c;IP地址欺骗是一种常见的威胁&#xff0c;它可能导致数据泄露、身份伪装和网络攻击。 1. 使用防火墙和入侵检测系统 防火墙和入侵检测系统&#xff08;IDS&#xff09;是网络安全…

Sui的动态可组合NFT为Cosmocadia增加游戏趣味性

的新游戏Cosmocadia展示了Sui NFT如何在游戏中四处走动&#xff0c;种植和收获蔬菜&#xff0c;并在工作台上制作工具和家具。未来将更新利用NFT&#xff0c;如私人土地&#xff0c;甚至让玩家将他们的SuiFrens NFT带入游戏中。 Lucky Kat Studios的产品经理Bente Bolland将Co…

神奇的代码恢复工具

文章目录 概述工具展示工具下载地址运行过程附件待恢复代码 概述 小C是一名程序猿&#xff0c;他有好多新奇的点子&#xff0c;也乐于把这些变成文字分享给大家。这些分享大部分都与代码相关&#xff0c;在文章里面把这些代码全部按本来的结构展示出来也不是一件容易的事&…

LMI FocalSpec 3D线共焦传感器 使用笔记1

一.硬件介绍 以上特别注意: 屏蔽线必须接地,因为在现场实际调试中,使用软件调试发现经常 弹窗 传感器丢失警告!! 以上 Position LED 的灯被钣金挡住,无法查看异常现象,能否将指示灯设置在软件界面上? 需要确认是软触发还是硬触发,理论上 硬触发比软触发速度要快.(我们目前使用…

Zilliz X Dify.AI ,快速打造知识库 AI 应用

Zilliz 大模型生态矩阵再迎新伙伴&#xff01;近日&#xff0c;Zilliz 和 Dify.AI 达成合作&#xff0c;Zilliz 旗下的产品 Zilliz Cloud、Milvus 与开源 LLMOps 平台 Dify 社区版进行了深度集成。 01.Zilliz Cloud v.s. Dify Dify 作为开源的 LLMs App 技术栈&#xff0c;在此…

[GXYCTF2019]BabyUpload - 文件上传+绕过(后缀文件类型文件内容.htaccess)

[GXYCTF2019]BabyUpload 解题流程 解题流程 1、上传一句话&#xff0c;提示“后缀不允许ph” 2、修改后缀为jpg&#xff0c;提示“上传类型也太露骨了吧&#xff01;” 3、修改类型为image/jpeg&#xff0c;提示“诶&#xff0c;别蒙我啊&#xff0c;这标志明显还是php啊” 4、…

【Axure教程】将figma导入Axure

Figma和Axure是两个不同的界面设计工具&#xff0c;Figma主要用于创建和协作设计图形界面&#xff08;UI&#xff09;&#xff0c;允许多个设计师和利益相关者同时在云端协作设计项目&#xff1b;Axure是原型设计工具&#xff0c;专注于创建高保真、可交互的原型。大家可以根据…

Java学习笔记(一)——概述

目录 一、Java概述 &#xff08;一&#xff09;Java技术体系平台 &#xff08;二&#xff09;Java重要特点 &#xff08;三&#xff09;Java运行机制及运行过程 &#xff08;四&#xff09;JDK &#xff08;五&#xff09;JRE 二、Java的快速入门 &#xff08;一&#…

掌握Python机器学习:空间模拟与时间预测的实战指南

了解全文点击:《掌握Python机器学习&#xff1a;空间模拟与时间预测的实战指南》 文章目录 一、机器学习原理与概述二、Python编译工具组合安装教程三、掌握Python语法及常见科学计算方法四、机器学习数据清洗五、机器学习与深度学习方法六、机器学习空间模拟实践操作七、机器…