文章头部背景

MySQL数据库编程基础入门1

MySQL数据库编程基础入门1

[TOC]

0x00 快速入门

问:什么是数据库(Database)?

  • 1.数据库就是一个文件系统,需要利用特定的命令SQL语句来进行操作;
  • 2.数据库是按照数据结构来组织、存储和管理数据库的建立在计算机存储设备上的仓库(数据库是数据的结构化集合);
  • 3.数据库赛长期存储在PC中,有组织、可共享的数据集合,数据库中的数据指的是以一定的数据模型组织、描述和存储在一起、尽可能小的冗余度,较高的数据独立性和易扩展性的特点并可在一定的范围内为多个用户共享;
  • 4.具有对象(例如数据库,表,视图,行和列)的逻辑模型提供了灵活的编程环境

问:数据库功能作用?

  1. 存储数据:数据仓库持久化存储;
  2. 访问权限:限制不同的角色访问不同的数据库以及表字段;
  3. 查询数据:数据查询方便、快捷;


(1) SQL介绍

描述:Structured Query Language 结构化查询语言(非过程性语言):SQL是用来存取关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能;
为加强SQL的语言能力,各厂商增强了过程性语言的特征如Oracle的PL/SQL 过程性处理能力,SQL Server、Sybase的T-SQL;


(2) MySQL介绍

描述:MySQL是最流行的开源SQL数据库管理系统(关系型数据库/NoSQL数据库),MySQL以联合创始人Monty Widenius的女儿My命名,现在已经被Oracle收购所以由Oracle Corporation开发,分发和支持。有免费的社区版本和收费的EnterPrise版本存在有闭源的风险,但是它的开发者又采用收购前的分支开发出它的兄弟Mariadb数据库两则有一定的异同,并且在CentOS6/7发型版本中默认已不再是MySQL;

MySQL软件提供了一个非常快速的多线程,多用户、健壮的SQL(结构化查询语言)数据库,MySQL服务器用于任务关键型、高负载 生产系统,以及嵌入到大规模部署;

  • 1.MySQL是一个数据库管理系统。
  • 2.MySQL数据库是关系型的。
  • 3.MySQL软件是开源的:软件使用GPL(GNU通用公共许可证)
  • 4.MySQL数据库服务器非常快速,可靠,可扩展且易于使用。
  • 5.MySQL-Server在客户端/服务器或嵌入式系统中运行。
  • 6.MySQL相关支持组件,比如采用PHP和JAVA通过通用数据访问对象进行对数据库进行操作;

MySQL的主要功能:

  • 内部结构和可移植性
    • 1.用C和C ++编写适用于不同的编译器和各个系统平台;
    • 2.使用具有独立模块的多层服务器设计,设计为使用内核线程完全多线程,可以轻松使用多个CPU(如果有)。
    • 3.使用MyISAM索引压缩非常快的B树磁盘表(),使用非常快速的基于线程的内存分配系统。
    • 4.使用优化的嵌套循环联接执行非常快速的联接,实现内存中的哈希表,用作临时表。
    • 5.提供事务性和非事务性存储引擎
    • 6.使用高度优化的类库来实现SQL函数,该类库应尽可能快。
    • 7.提供服务器作为在客户端/服务器网络环境中使用的单独程序,以及作为可嵌入(链接)到独立应用程序中的库
  • 繁多的数据类型:
    • 1.(有符号/无符号)整型 / 浮点型 / 字符型 / 文本类型 / 二进制类型 / 日期时间类型和开放GIS空间类型
    • 2.固定长度和可变长度的字符串类型
  • 声明和函数
    • 1.SQL的DQL中支持完全运算符计算和函数支持,如WHERE id % 2 = 0;.
    • 2.字符类函数CONNCAT(),统计类函数COUNT(),时间类函数TIMESTAMP(),编码加密类函数md5();
    • 3.支持标准的SQL语法和ODBC语法,比如:GROUP BY和 ORDER BY子句
    • 4.支持左右连接,交叉连接,全连接:LEFT OUTER JOIN和 支持RIGHT OUTER JOIN标准SQL
    • 5.函数名称与表或列名称的独立性。例如,ABS是一个有效的列名。唯一的限制是对于函数调用,函数名称和其后的“ (”之间不允许有空格
  • 安全
    • 1.连接服务器时,通过对所有密码通信进行加密来实现密码安全。连接验证非常灵活和安全,并且可以进行基于主机的验证。
  • 可扩展性和限制
    • 1.支持大型数据库:包含5000万条记录的数据库,每个有200,000个表和大约5,000,000,000行,MySQL对数据库的数量本身赛没有限制,但是基础文件系统可能对目录数量有所限制。
    • 2.每个表最多支持64个索引,每个索引可以包含1到16列或部分列。InnoDB表的最大索引宽度为767字节或3072字节
  • 连接协议
    • 客户端可以使用多种协议连接到MySQL Server,使用TCP / IP套接字进行连接,在Windows系统上使用命名管道进行连接, Windows服务器还支持共享内存连接, Unix系统上客户端可以使用Unix域套接字文件进行连接
    • MySQL客户端程序可以用多种语言编写:C,C ++,Eiffel,Java,Perl,PHP,Python,Ruby和Tcl的API
    • Connector / ODBC(MyODBC)接口为使用ODBC(开放数据库连接)连接的客户端程序提供MySQL支持
    • Connector / J 接口为使用JDBC连接的Java客户端程序提供MySQL支持
    • Connector / NET 使开发人员可以轻松创建需要与MySQL安全,高性能数据连接的.NET应用程序。它实现了必需的ADO.NET接口,并集成到ADO.NET感知工具中。
  • 本土化定位
    • 1.支持不同的字符集可以在编译时和运行时指定它们,可以设置多种语言项客户端提供错误信息;
    • 2.排序和比较是根据默认字符集和排序规则完成的。
    • 3.可以指定时区以及服务器时区的动态修改。
  • 客户端和工具
    • 1.命令行: mysqldump | mysqladmin
    • 2.图形化程序: MySQL Workbench
    • 3.检查优化以及表修复: mysqlcheck
    • 4.MyISAM引擎操作工具 myisamchk


常见的关系化数据库:


问:什么是关系型数据库?
答:主要是用来描述实体entity与实体之间的关系,比如学生和班级;我们常用E-R关系图来进行数据库表字段设计,E-R关系图是一个DBA必须需要了解并且掌握的:

问:什么是E-R图?
答:E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。

  • 实体(Entity):方框
  • 属性(Property):椭圆
  • 关系(Relation):菱型
weiyigeek.top-

weiyigeek.top-

问:什么是非关系型数据库(NoSQL)?
答:它是一个Key:Value类型的数据库;


(3) 版本特性

MySQL发行版本:

  • MySQL Community Server: 社区Community版本免费遵循GPL协议
  • MySQL Enterprise Server: 企业版本商业用途;

MySQL Community 版本:

  • 5.7.x 系列 (当前版本 5.7.28)
  • 8.0.x 系列 (当前版本 8.0.20)

问:MySQL 5.7.x 与 8.0.x 版本有什么区别?

  • 1.速度:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍 (光这一个理由即可)
  • 2.性能:读/写工作负载、IO 密集型工作负载、以及高竞争(”hot spot”热点竞争问题)工作负载
  • 3.NoSQL:MySQL 从 5.7 版本开始提供 NoSQL 存储功能,但是8.0系列版本得到了更大的改进该项功能消除了对独立的 NoSQL 文档数据库的需求,而 MySQL 文档存储也为 schema-less 模式的 JSON 文档提供了多文档事务支持和完整的 ACID 合规性。
  • 4.窗口函数(Window Functions):8.0版本新增概念,它可以用来实现若干新的查询方式;它与 SUM()、COUNT() 这种集合函数类似,但它不会将多行查询结果合并为一行,而是将结果放回多行当中,即窗口函数不需要 GROUP BY。
  • 5.隐藏索引:8.0支持索引可以被“隐藏”和“显示”,当对索引进行隐藏时,它不会被查询优化器所使用,可以使用这个特性用于性能调试
    • 例如:我们先隐藏一个索引,然后观察其对数据库的影响。如果数据库性能有所下降,说明这个索引是有用的,然后将其“恢复显示”即可;如果数据库性能看不出变化,说明这个索引是多余的可以考虑删掉。
  • 6.降序索引:为索引提供按降序方式进行排序的支持,在这种索引中的值也会按降序的方式进行排序;
  • 7.UTF-8 编码:从 MySQL 8 开始,使用 utf8mb4 作为 MySQL 的默认字符集。
  • 8.JSON:MySQL 8 大幅改进了对 JSON 的支持,添加了基于路径查询参数从 JSON 字段中抽取数据的 JSON_EXTRACT() 函数,以及用于将数据分别组合到 JSON 数组和对象中的JSON_ARRAYAGG() 和 JSON_OBJECTAGG()聚合函数(重点关注) 。
  • 9.可靠性:InnoDB 现在支持表 DDL 的原子性(InnoDB 表上的 DDL 也可以实现事务完整性了),要么失败回滚要么成功提交,不至于出现 DDL 时部分成功的问题,此外还支持 crash-safe 特性,元数据存储在单个事务数据字典中(重点关注)。
  • 10.安全性:对 OpenSSL 的改进、新的默认身份验证、SQL角色、密码强度、授权。
  • 11.高可用性(High Availability):InnoDB 集群为您的数据库提供集成的原生 HA 解决方案。
  • 12.通用表表达式(Common Table Expressions CTE):在复杂的查询中使用嵌入式表时,使用 CTE 使得查询语句更清晰。
  • 13.MySQL 8.0不支持通过在 数据目录下手动创建目录(例如,使用mkdir)来创建数据库目录 。

参考资料:


0x01 数据库架构

描述:了解了MySQL数据库架构有助于我们深入学习MySQL,以及后期的性能调优;

MySQL的逻辑架构主要分为三个层次:

  • 服务层:为客户端请求做连接处理,授权认证,安全等;
  • 核心层:查询解析,分析,优化,缓存,所有内建函数,存储过程,触发器,视图;
  • 存储引擎层:存储和提取数据以及事务处理;
weiyigeek.top-逻辑架构

weiyigeek.top-逻辑架构


名词解释:

  • 客户端:MySQL客户端并不是单单只指界面或者命令行的MySQL数据库连接软件,它是一种复合概念包含了不同的编程语言编写的后端查询存储应用程序以及所调用的API接口;
    • 比如:MySQL-Client命令行,Native 数据库连接软件,以及PHP的PDO扩展和JAVA的JDBC数据库连接驱动等;


1.服务层
描述:MySQL数据库是一个单进程多线程的应用程序;

weiyigeek.top-服务层

weiyigeek.top-服务层


2.核心层
描述:主要针对于SQL语句进行解析优化,并且查看是否存在缓存记录以提高快速数据查询的效率;

weiyigeek.top-核心层

weiyigeek.top-核心层


3.存储引擎层
描述:有了改层不同的存储引擎,可以根据多个应用场景进行选择不同的存储引擎,他们之间的算法以及IO执行效率都是不同需要根据场景选择。并且他们完美支持WINDOWS/LINUX的文件系统,后面再学习优化的时候重点了解;

weiyigeek.top-存储引擎层

weiyigeek.top-存储引擎层


weiyigeek.top-MySQL架构总图

weiyigeek.top-MySQL架构总图


0x02 库设计标准和原理

描述:MySQL数据库服务器、数据库和表的关系:

  • 所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。
  • 数据在数据库中的存储方式:表的一行称之为一条记录;
    weiyigeek.top-DB数据库和表的关系

    weiyigeek.top-DB数据库和表的关系


(1)MySQL数据库设计标准(重要):

  • 1.数据库:采用小写为首加_下划线连接,例如database_project;
  • 2.数据表:采用小写为首加_下划线连接,例如table_project;
  • 3.数据列:驼峰式命名法第一个单词小写,后面首字母大写,例如displayName;
  • 4.主键(Primary Key):每一个表都应设立主键(快速定位,保证唯一性),主键字段Values一般用整数或短字符串
  • 5.索引(Index):为了能加快某列查询的速度就需要将某列字段添加索引,例如为了加快按日期查询的速度,可以建立生日的索引;
  • 6.连接(JOIN):连接不同表的字段内外连接,左右连接,全连接,交叉链接;
  • 7.外键(FOREIGN KEY):作为一种约束条件用于维护数据的完整性(不让用户乱删、错改)。


(2)数据库默认库介绍
描述:我们通过show databases命令可以看见数据库默认的库,下面我们介绍一下这些库的具体应用;

点击阅读完整原文

欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#weiyigeek.top】或者个人公众号【WeiyiGeek】联系我。

更多文章来源于【WeiyiGeek Blog - 为了能到远方,脚下的每一步都不能少】, 个人首页地址( https://weiyigeek.top )

WeiyiGeek-banner

专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注、转个发、赞个助】,这将对我的肯定,我将持续整理发布更多优质原创文章!。


最后更新时间:
文章原始路径:_posts/数据存储/MySQL/MySQL数据库编程基础入门1.md
转载注明出处,原文地址:https://blog.weiyigeek.top/2019/12-1-43.html
本站文章内容遵循 知识共享 署名 - 非商业性 - 相同方式共享 4.0 国际协议
0 comments
Anonymous
Markdown is supported

Be the first person to leave a comment!

如果此篇文章对您有帮助,就请作者喝杯 Coffee ☕️☕️!

微信打赏二维码 支付宝打赏二维码

扫一扫,分享到微信

微信分享二维码

关注【全栈工程师修炼指南】

weiyigeek

欢迎添加【作者】微信

weiyigeek