不积跬步,无以至千里
博客
Python
Python
Flask
Django
FastAPI
设计模式(Python语言)
数据结构与算法(Python语言)
爬虫
数据分析
Java
Java
SpringBoot
SprintCloud
CC++
C语言
C++语言
Go
Go
设计模式(Go)
数据结构与算法(Go)
云计算
云计算理论
Linux
Shell
云原生
云原生理论
Docker
Kubernetes
Kubersphere
DevOps
Git
Gitlab
Jenkins
Nexus
Harbor
SonarQube
Grafana
OpenQA
建木
禅道
Compass-CI
前端
HTML
CSS
JavaScript
BootStrap
Vue
React
Markdown
数据库
MySql
Redis
MongoDB
H2 Database
Liquibase
ElasticStack
中间件
MQ
Kafka
Nginx
cpolar
阿里云
测试
测试理论
安全测试
压力测试
Pytest
UnitTest
考试
软考中级(软件设计师考试)
软考高级(系统架构设计师考试)
登录
注册
MySQL----数据库概述
收藏本文
作者:redrose2100 类别:MySql 日期:2022-05-27 16:32:35 阅读:531 次 消耗积分:0 分
## [MySQL----数据库概述](http://blog.redrose2100.com/article/309) [TOC] ## 一、数据库简介 ### 1.1 为什么要使用数据库 * 持久化: 把数据保存到可掉电式存储设备中供以后使用,大多数情况下,数据持久化意味着将内存中的数据保存到硬盘上加以“固话” * 持久化的主要作用: 将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、xml数据文件中 如下,即将数据持久化的示意图  ### 1.2 数据库与数据库管理系统 * DB:数据库(Database) 即存储数据的仓库,其本质是一个文件系统,它保存了一系列有组织的数据 * DBMS:数据库管理系统(Database Management System) 是一种曹忠和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,用户通过数据库管理系统访问数据库表内的数据 * SQL:结构化查询语言(Structured Query Language) 专门用来与数据库通信的语言 ### 1.3 数据库与数据库管理系统的关系 数据库管理系系统(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库,为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体用户的数据 数据库管理系统、数据库、表的关系如下所示:  ### 1.4 常见的数据库管理系统排名(DBMS) 常用的数据库管理软件有Oracle,MySQL,Microsoft SQL Server,PostgreSQL,MongoDB等等,以下为最新的2022年5月份的数据库排名,实时排名查询网站为[数据库排名网站](https://db-engines.com/en/ranking)  常用数据库的发展趋势如下,可以看出,前三的Oracle,Mysql,Microsoft SQL Server一直遥遥领先,没的说,值得注意的是Snowflask上升趋势非常明显,那么从追求新技术发展的角度来说,可以抽出一点时间具体了解了解,此外,PostgreSQL,MongoDB上升趋势也是很明显,那么时不时抽出来点时间关注一下这些趋势的变化特点,有助于能及时抓住技术发展的方向,[数据库发展趋势的链接](https://db-engines.com/en/ranking_trend)  ### 1.5 常见的数据库 * Oracle * 1979年,Oracle 2诞生,它是第一个商用的RDMBS(关系型数据库管理系统),随着Oracle名气越来越大,公司名也改名叫Oracle公司了 * 2007年,Oracle以总计85亿美金收购BES Systems * 2008年,SUN以10亿美金收购MySQL * 2009年,Oracle以总计74亿美金收购SUN,即Oracle拥有了MySQL的管理权,至此,Oracle公司在数据库领域中成为绝对的领导者 * 2013年,甲骨文超过IBM,成为继Microsoft后全球第二大软件公司 * SQL Server * SQL Server是微软开发的大型商业数据库,诞生于1989年,因为微软C#,.net等编程语言使用比较多,SQL Server与windows完全集成,也可以很好与Microsoft 产品集成 * DB2 * IBM公司的数据库产品,收费的,常用于银行系统 * PostgreSQL * PostgreSQL的稳定性极强,最符合SQL标准,开放源码,具备商业级DBMS质量,PostgreSQL对数据量大的文本以及SQL处理较快 * SyBase * 已经淡出历史舞台了,提供了一个非常专业数据建模的工具PowerDesigner * SQLite * 嵌入式的小型数据库,应用在手机端。特点是零配置,SQLite3不用安装,不用配置,不用启动关闭或者配置数据库实例,当系统崩溃后不用做任何恢复操作,在下次使用数据库的时候自动恢复 ## 二、MySQL简介 ### 2.1 概述 * MySQL是一个开放源代码的关系型数据库管理系统,由瑞典MySQL AB(创始人:Michael Widenius)公司1995年开发,迅速成为开源数据库的No.1 * 2008年被Sun公司以10亿美金收购 * 2009年Sun公司被Oracle公司收购,MariaDB应运而生,MySQL的创造者担心MySQL有闭源的风险,因此创建了MySQL的分支项目MariaDB * MySQL 6.x版本之后分为社区版和商业版 * MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有的数据放在一个大仓库内,这样就增加了速度并提升了灵活性 * MySQL是开源的,所以不需要支付额外的费用 * MySQL是可以定制的,采用GPL(GNU General Public License)协议,你可以修改源码来开发自己的MySQL系统 * MySQL支持大型的数据库,可以处理拥有上千万条记录的大型数据库 * MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大表文件为8TB * MySQL使用标准的SQL数据语言形式 * MySQL可以云秀运行与多个系统上,并且支持多种语言,这些编程语言包括C,C++,Python,Java,Perl,PHP,Ruby等 ### 2.2 关于MySQL8.0 * MySQL从5.7版本直接跳跃发布了8.0版本 * MySQL8.0版本对MySQL源代码进行了重构,最突出的一点就是多MySQL Optimizer优化器进行了改进,不仅在速度上得到了改善,还为用户带来了更好的性能和更棒的体验 ### 2.3 为什么选择MySQL * 开放源代码,使用成本低 * 性能卓越,服务稳定 * 软件体积小,使用简单,并且易于维护 * 历史悠久,社区用户非常活跃,遇到问题可以寻求帮助 * 许多互联网公司在用,经过了时间的验证  ### 2.4 Oracle VS MySQL * Oracle更适合大型跨国企业的使用,因为他们对费用不敏感,但是对性能要求以及安全性有更高的要求 * MySQL由于其体积小、速度快、总体成本低,可以处理上千万条记录的大型数据库,尤其是开发源代码这一点,使得很多互联网公司、中小型网站选择MySQL做伪网站数据库 ## 三、关系型数据库与非关系型数据库 ### 3.1 关系型数据库的实质 * 关系型数据库是最古老的数据库类型,关系给你个数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)  * 关系型数据库以行(row)和列(column)的形式存储数据,以便于用户理解,这一系列的行和列被称为表(table),一组表就组成了一个库(database) * 表与表之间的数据记录有关系(relationship),现实世界中的各种实体以及实体之间的各种联系均关系模型来表示,关系型数据库,就是建立在关系模型基础上的数据库 * SQL就是关系型数据库的查询语言 ### 3.2 关系型数据库的优势 * 复杂查询:可以用SQL语句方便的在一个表以及多个表之间非常复杂的数据查询 * 事务支持:使得对于安全性能很高的数据访问要求得以实现 ### 3.3 非关系型数据库简介 非关系型数据库可以看成传统关系型数据库的功能的阉割版本,基于键值对存储数据,不需要经过SQL层的解析,性能非常高,同时,通过减少不常用的功能,进一步提高性能,此外,目前基本上大部分主流的非关系型数据库都是免费的 ### 3.4 常见的非关系型数据库 相对于SQL,NoSQL泛指非关系型数据库,包括键值型数据库、文档型数据库、搜索引擎数据库、里存储数据库、图形数据库等 * 键值型数据库: 键值型数据库通过key-value键值的方式存储数据,其中key和value可以是简单的对象,也可以是复杂的对象,key作为唯一的标识符,优点是查找速度快,在这方面明显优于关系型数据库,缺点是无法像关系型数据库一样使用条件过滤,如果不知道去哪里找键,就要遍历所有的键,这就要消耗大量的计算。键值型数据库典型的使用场景作为内存缓存,Redis是最流行的键值型数据库 * 文档型数据库 此类数据库课存放并获取文档,可以是xml、json等格式,在数据库中文档作为处理信息的基本的安慰,一个文档就相当于一条记录,文档数据库所存放的文档,就相当于键值数据库所存放的值,MongoDB是最流行的文档型数据库,此外还有CouchDB等 * 搜索引擎数据库 虽然关系型数据库采用了索引提升检索效率,但是针对全文索引的效率却较低,搜索引擎数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证新能最优,核心原理是“倒排索引”,典型的产品时Solr,Elasticsearch,Splunk等 * 列式数据库 列式数据库是相对于行式数据库,Oracle,MySQL,SQL Server等数据库都是采用的行式存储(Row-base),而列式数据库将数据按照列存储到数据库中,这样的好处是可以大量降低系统的IO,适合于分布式文件系统,不足在于功能相对有限,典型产品是HBase * 图形数据库 图形数据库,利用了图这种数据结构存储了实体(对象)之间的关系,图形数据库最典型的例子就是社交网络中人与人的关系,数据模型主要是以节点和边(关系)实现,特点在于能高效解决复杂的关系问题,典型的产品有Neo4J、InfoGrid等 ### 3.5 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.1 表的关联关系的种类 * 一对一关联 * 一对多关联 * 多对多关联 * 自我引用 ### 4.2 一对一关联 * 在实际开发中应用不多,因为一对一可以创建一张表 * 举例:设计学生表:学号、姓名、手机号码、班级、系别、身份证号码、家庭地址、籍贯、紧急联系人,... * 拆违两个表 * 基础信息表(蝉蛹信息):学号、姓名、手机号码、班级、系列 * 档案信息表(不常用信息):学号、身份证号码、家庭地址、籍贯、紧急联系人 * 两种建表原则 * 外键唯一:主表的主键和从表的外键唯一,形成主外键关系,外键唯一 * 外键是主键:主表的主键和从表的主键,形成主外键关系 ### 4.3 一对多关系 * 常见实例场景:客户表和订单表,分类表和商品表,部门表和员工表 * 举例: * 员工表:编号、姓名,... 所属部门 * 部门表:编号、名称、简介 * 一对多建表原则:在从表(多方)创建一个字段,字段作为外键执行主表(一方)的主键 ### 4.4 多对多 * 多对多关系,必须创建第三个表,该表称为联接表,它将多对多关系划分为两个一对多关系,将两个表的主键都插入到第三个表中  * 举例:学生-课程 * 学生信息表:学号、姓名、手机号码、班级、系别,... * 课程信息:课程编号,老师,简介 * 选课信息:一个学生可以选多门课程,一门课也可以被多个学生选择 * 多对多关系建表原则:需要创建第三张表,中间表至少两个字段,这两个字段分别作为外键指向各自一方的主键 ### 4.5 自我引用 如下图所示的员工表,即是自我引用的例子 
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/309
上一篇:
Python----使用apscheduler模块设置定时任务
下一篇:
MySQL----MySQL环境搭建即MySQL在Windows、Centos、Docker、Kubernetes环境下的安装部署
你的昵称:
你的评论:
提示:登录后添加有效评论可享受积分哦!
点此登录
搜索
个人成就
DevOps技术交流微信群
加微信邀请进群
常用网站链接
开源软件洞察
云原生技术栈全景图
Python语言官方文档
Go语言官方文档
Docker官方文档
Jenkins中文用户手册
Markdown语法官方教程
Harbor官方文档
openQA官方文档
云原生开源社区
开源中国
Kubernetes中文文档
Kubernetes中文社区
Kubersphere官方文档
BootStrap中文网站
JavaScript中文网
NumPy官方文档
Pandas官方文档
GitLink确实开源网站
数据库排名网站
编程语言排名网站
SEO综合查询网站
数学加减法练习自动生成网站
Kickstart Generator
文章分类
最新文章
最多阅读
特别推荐
×
Close
登录
注册
找回密码
登录邮箱:
登录密码:
图片验证码:
注册邮箱:
注册密码:
邮箱验证码:
发送邮件
注册邮箱:
新的密码:
邮箱验证码:
发送邮件