首页 > 代码库 > Mysql基础

Mysql基础

1.1 数据库简介


简单的说数据库(database)就是一个存储数据的仓库,它将数据按照一定规律存储到磁盘上,通过数据库管理系统,能够有效的管理存储在数据库中的数据
(1)Mysql的基础知识
(2)SQL应用
(3)Mysql事务
(4)Mysql权限以及监控
(5)Mysql调优
(6)Mysql备份和恢复
(7)Mysql集群和复制

DBMS(database manager system)
在DBMS出现之前,都是用文件来进行数据管理,会出现一下问题:
(1)数据冗余
(2)数据一致性
(3)数据访问困难
(4)数据是孤立的
(5)完整性问题
(6)原子性问题
(7)并发访问异常问题
(8)安全性问题
DBMS解决了什么问题?

1.2 Mysql体系结构


Mysql被设计成一个可移植的数据库,几乎可以在所有的操作系统运行(Linux Unix Windows)

定义数据库和实例
实例和数据库
数据库:以物理文件的方式存储在磁盘上面(.frm .myd .idb 后缀的文件存储)
NDB存储引擎,它的数据库文件,在内存当中

实例:由数据库后台进程/线程以及一个个共享内存区域组成
数据库实例才是用来操作数据库文件的
每个实例都是以单进程方式存在

数据库:实例 1:1
比如在特殊的集群当中,可能会出现一个数据库被多个实例操作

1.3 Mysql微观结构


技术分享
概述整个数据库逻辑执行过程?
流程图详解:
所有的用户连接请求都是先发往连接管理器的,连接管理器(是一个侦听器)用于侦听来自客户端的连接,并接受用户请求,用户请求被接收下来,而一个用 户请求需要一个线程来响应,因此需要一个线程管理器。线程管理器负责给用户创建生成新的线程或完成线程重置的方式给用户一个响应线程,用户连接进来后需要 检查用户权限(是否允许访问mysql服务器等等权限)。这时就需要用户模块出场了,用户模块负责管理用户是否能够连接的,这是管理权限的第一关,如果用 户不能请求,那用户请求就终止了,因此用户模块还负责退回用户请求(主要作用是验证用户请求和用户身份的)。
一旦用户具有连接的权限,那用户就可以发一些SQL语句,而每一个SQL语句需要进行分析,不同的语句需要分配给不同的解析器,因此就需要命令分发 模块,就把这些不同类型的语句分配给与之对应的解析器上去。如果命令在分发之前是一个查询语句,而且我们的缓存中有内容,就可以直接返回给用户结果了,因 此也有可能会跟缓存模块进行交互。当用户发起一个命令之后,例如我们的web,当用户请求资源后,都会记录在日志中的,因此命令分发模块也有可能会和日志 模块进行交互的,日志模块的主要功能是记录用户查询的。缓存模块和日志模块并不是并行的,命令分发模块给两者都有可能有交互的。
如果缓存中没有就要将用户请求的命令分发出去,将命令交给解析器(解析查询生成解析数),由解析器判断命令最终属于哪种语句,如果解析器解析此命令 是select语句,需要交给优化器进行优化。如果是update、insert、delete语句,需要交给表定义模块(这一过程也要进行权限的判 断)。mysql也有与repair相关的语句,那可想而知需要表维护模块了,表维护模块主要作用是修复表中的某些逻辑错误的。mysql中也有很多状态 变量,而这些状态变量也需要状态报告模块来存储每一个执行过程中的状态信息。mysql也有复制的功能,把主mysql服务器上的数据同步到从mysql 服务器上的过程,这就是复制模块的功能。
无论哪个模块,用户最终要完成操作,必须要检查用户是否具有权限,上面所说的表定义模块、表维护模块都需要检查用户权限,因此最终这些命令语句都要 交给访问控制模块来控制:用于检验客户端用户的操作是否具有足够的操作权限,来执行请求操作如果访问模块检查后发现没有任何问题,会把这些命令语句交给另 一个组件表管理器,由表管理器完整真正意义上的操作,表管理器负责创建、读取或修改表定义文件的。表管理器交给存储引擎(存储引擎的接口),存储引擎交给 最核心的-->MYISAM或INnoDB。

1.4 SQL语言


DBMS是通过SQL语言来进行数据库管理的。SQL语言是一种查询和设计语言。
主要用于存储数据,查询数据 更新和管理关系数据库
SQL语言总共分为三个部分
DDL(Data Definition Language)语句,用于定义数据库表、视图索引和触发器等
create
alter
drop
rename
truncate
comment

DML(Data Maniplulation Language)语句,用于插入数据、查询数据以及更新数据、删除数据
select
insert
update
delete

DCL(Data Control Language)语句,用户控制用户的访问权限
grant
revoke

1.5 常见的数据库系统


1.甲骨文Oracle
2.IBMDB2
3.Sybase
4.微软Access和SQL Server
5.开源PostgreSQL
6.开源Mysql

1.6 Mysql数据库介绍


Mysql是一个关系数据库管理系统,最初由瑞典MYSQL AB公司开发的,目前属于ORACLE公司
Mysql是一种关联数据库系统,关联数据库将数据保存在不同的表中,而不是将所有的数据放在一个大的仓库内,这样增加了速度提高了灵活性
Mysql是一个开源的小型关联数据库管理系统,Mysql被广泛的应用到了internet上的中小型企业。由于体积小,速度快,总体拥有成本低。

Mysql特性:
1.跨平台,支持多种操作系统,AIX Free HP-UX Linux MacOS NovellNetWare OpenBSD Solaris windows 等等
2.支持多线程,可以充分的利用硬件资源(CPU资源)
3.支持大型数据库,可以处理拥有上千万条大型数据库
4.支持多种插件式存储引擎

Mysql版本
5.0--》5.1--》5.2--》5.3--》5.4--》5.5--》5.6--》5.7
Alpha 开发版
Beat 测试版
Gama 发行一个段时间的Beat版本
Generally Avalilable(GA) 稳定版
以上版本之间有什么区别?
5.0
1,视图,触发器,存储过程和存储函数
2,游标
3,xa分布式事务
2,Federated引擘
5.1
1,Sun收购后的版本
2,分区表
3,行复制.
4,BerkeleyDB移出
5,Federated were deprecated
6,Oracle推出InnoDB plugin版本
7,Event
8,Plugin API
9,Pluggable storage engine API
10,日志表
11,加强information_schema
12,mysqlslap
13,慢查询阀值可设置为毫秒
5.2
5.3
5.4
5.5
1,Oracle收购后的版本
2,InnoDB变为默认引擘
3,加入performance_schema库,监控MySQL服务器运行时的性能
4,半同步复制
5,多缓冲池实例
6,Supplementary Unicode characters
7,多核利用率提高
8,加强SHOW ENGINE INNODB STATUS输出
9,分区支持新增RANGE COLUMNS,LIST COLUMNS
10,ALTER TABLE … TRUNCATE PARTITION
11,TO_SECONDS() function
12,编译采用cmake
13,多个回滚段(Multiple Rollback Segments)
14,提高了默认线程并发数,设置innodb_thread_concurrency
15,后台输入/输出线程控制,设置innodb_read_io_threads和innodb_write_io_threads
16,主线程输入/输出速率控制,设置innodb_io_capacity
17,可以关闭适应性散列索引功能
18,可以关闭InnoDB的插入缓冲
19,恢复组提交(Restored Group Commit)
20,快速恢复重启
21,MySQL 5.5为基于Linux和Windows的数据库系统提供了真实的异步输入/输出支持。如果新的默认设置与主机输入/输出子系统不兼容,要使用该功能,需要在Linux系统中安装libaio用户空间库,并配置innodb_use_native_aio选项参数(该参数可以关闭)
22,使用innodb_change_buffering配置参数来控制删除缓冲和既有插入缓冲功能,默认在所有的系统中都使用
23,每一个缓冲池实例都有一个单独的刷新(Flush)列表互斥,从而进一步减少了争用
24,设置innodb_purge_threads配置参数来选择清除操作是否使用单独线程
25,禁止会话执行另一个会话中,未完成事务处理正在使用的表格中的DDL语句,能够保证事务处理的串行化
26,Linux系统中,在高事务处理频率和连接负载的情况下,MySQL5.5在处理只读(Read Only)操作时的性能和可扩展性是MySQL5.1的200%,处理读/写操作时的性能和可扩展性是MySQL5.1的370%
27,复制Heartbeat
28,relay_log_recovery,自动丢弃自己未处理的中继日志(Relay Log),然后从源主机服务器恢复挂起的事务处理
29,根据服务器过滤项复制
30,SLAVE_TYPE_CONVERSION,提供了一种精确的数据类型转换机制
31,建立快速索引,添加(Add)或删除(Drop)索引,而无需复制整个目标表中的底层数据
32,数据压缩,ROW_FORMAT和KEY_BLOCK_SIZE参数,按照1K,2K,4K,8K或标准16K字节压缩等级存储数据页。
33,ROW_FORMAT=DYNAMIC或ROW_FORMAT=COMPRESSED创建表,这提高了大对象的存储效率
34,存储对象(包括存储过程,函数,触发器)内部使用SIGNAL/RESIGNAL语法,用于项目的前期研发和调试,然后产生错误条件,并使用该条件调用主机应用程序中的专用错误处理程序
35,表和索引RANG和LIST分区范围扩展到了非整数列和日期,并增加了在多个列上分区的能力,COLUMNS关键字支持这些选项
5.6
1,查询优化:Index Condition Pushdown,Multi-Range Read,File Sort Optimization
2,加强performance_schema库
3,Dump/Restore buffer pool for fast start up
4,UUID唯一标识服务器,内部事务序列产生全局唯一GTID
5,自动回滚复制到一半的事务并重做整个事务
6,row格式Binlog中只记必需字段
7,延时复制
8,远程Binlog备份
9,row格式复制记录SQL语句
10,kernel mutex splits into different mutexes
11,InnoDB 全文搜索
12,Online add index,Add / Drop Foreign Key,Add / Drop Column,Rename Table,Rename Column
13,Transportable Tablespaces
14,Direct Access to InnoDB via Memcached
15,innodb压缩增强
16,improved accuracy of InnoDB index statistics, and consistency across MySQL restarts
17,NoSQL Interface via memcached
18,分区增强:Explicit Partition Selection–SELECT * FROM employees PARTITION (p0, p2),Import / Export for Partitioned Tables-ALTER TABLE e EXCHANGE PARTITION p0 WITH TABLE e2
19,多线程复制,数据库级别
20,Replication Checksums
21,Hash Join
22,Read-Only事务区分
23,5.6.6峰值最高可以达到16w的QPS,比原版的5.1提升4倍(使用flash设备)
5.7
1. 性能和可扩展性:改进 InnoDB 的可扩展性和临时表的性能,从而实现更快的网络和大数据加载等操作。
2. JSON支持:使用 MySQL 的 JSON 功能,你可以结合 NoSQL 的灵活和关系数据库的强大。
3. 改进复制 以提高可用性的性能。包括多源复制,多从线程增强,在线 GTIDs,和增强的半同步复制。
4. 性能模式 提供更好的视角。我们增加了许多新的监控功能,以减少空间和过载,使用新的 SYS 模式显著提高易用性。
5. 安全: 我们贯彻“安全第一”的要求,许多 MySQL 5.7 新功能帮助用户保证他们数据库的安全。
6. 优化: 我们重写了大部分解析器,优化器和成本模型。这提高了可维护性,可扩展性和性能。
7. GIS: MySQL 5.7 全新的功能,包括 InnoDB 空间索引,使用 Boost.Geometry,同时提高完整性和标准符合性。


1.7 如何学习数据库?


学习数据库主要多练习,
多上机实践
多编写SQL
多回顾理论知识

1.8 本章练习题目


1.常见的数据库系统有那些
1.甲骨文Oracle
2.IBMDB2
3.Sybase
4.微软Access和SQL Server
5.开源PostgreSQL
6.开源Mysql
2.SQL语言分为哪几种,请详细描述
SQL语言总共分为三种
DDL(Data Definition Language)语句,用于定义数据库表、视图索引和触发器等
create
alter
drop
rename
truncate
comment
DML(Data Maniplulation Language)语句,用于插入数据、查询数据以及更新数据、删除数据
select
insert
update
delete
DCL(Data Control Language)语句,用户控制用户的访问权限
grant
revoke
3.Mysql 5.5 5.6 5.7 之间有什么区别
5.5
5.6
5.7
1. 性能和可扩展性:改进 InnoDB 的可扩展性和临时表的性能,从而实现更快的网络和大数据加载等操作。
2. JSON支持:使用 MySQL 的 JSON 功能,你可以结合 NoSQL 的灵活和关系数据库的强大。
3. 改进复制 以提高可用性的性能。包括多源复制,多从线程增强,在线 GTIDs,和增强的半同步复制。
4. 性能模式 提供更好的视角。我们增加了许多新的监控功能,以减少空间和过载,使用新的 SYS 模式显著提高易用性。
5. 安全: 我们贯彻“安全第一”的要求,许多 MySQL 5.7 新功能帮助用户保证他们数据库的安全。
6. 优化: 我们重写了大部分解析器,优化器和成本模型。这提高了可维护性,可扩展性和性能。
7. GIS: MySQL 5.7 全新的功能,包括 InnoDB 空间索引,使用 Boost.Geometry,同时提高完整性和标准符合性。
4.请简述Mysql特性以及发行版本.
Mysql特性:
1.跨平台,支持多种操作系统,AIX Free HP-UX Linux MacOS NovellNetWare OpenBSD Solaris windows 等等
2.支持多线程,可以充分的利用硬件资源(CPU资源)
3.支持大型数据库,可以处理拥有上千万条大型数据库
4.支持多种插件式存储引擎
Mysql版本
5.0--》5.1--》5.2--》5.3--》5.4--》5.5--》5.6--》5.7
Alpha 开发版
Beat 测试版
Gama 发行一个段时间的Beat版本
Generally Avalilable(GA) 稳定版

Mysql基础