(一)认识MySQL

MySQL数据库是开放源代码的关系型数据库。目前,它可以提供的功能有:支持sql语言、子查询、存储过程、触发器、视图、索引、事务、锁、外键约束和影像复制等。


OracleSQLServer等大型数据库系统一样,MySql也是客户/服务器系统并且是单进程多线程架构的数据库。


MySql区别于其它数据库系统的一个重要特点是支持插入式存储引擎。


MySQL的优势是查询,而不是事物处理,事务处理需要第三方引擎或工具如:InnoDB数据引擎



(二)关系型数据库

关系型数据库简单的可以理解为二维数据库,表的格式就如Excel,有行有列。

常用的关系数据库有Oracle,SqlServer,Informix,MySql,SyBase等。



MySQL关系型数据库划分以下几个部分:

1)数据库(databases):用来存储信息的仓库,它们构造简单,遵守一定的规则.

数据库里的数据集合都存放在数据库表(tables)里;

数据表由数据行(row)和数据列(column)构成;

一个数据行就是数据表里的一条记录(record);

记录可以包含多个信息项,数据表里的每一个数据列都对应一个信息项.


2)管理系统:用来对数据进行插入,检索,修改,删除等操作软件.


3)关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名。

   元组:可以理解为二维表中的一行,在数据库中经常被称为记录。
  属性:可以理解为二维表中的一列,在数据库中经常被称为字段。
   域:属性的取值范围,也就是数据库中某一列的取值限制。  
  关键字:一组可以唯一标识元组的属性。数据库中常称为主键,由一个或多个列组成。
  关系模式:指对关系的描述,其格式为:关系名(属性1,属性2,…,属性N)。在数据库中通常称为表结构。



关系型数据库的优点:

1)关系型数据库相比其他模型的数据库而言,有着以下优点:

2)容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解。

3)使用方便:通用的SQL语言使得操作关系型数据库非常方便,程序员甚至于数据管理员可以方便

4) 在逻辑层面操作数据库,而完全不必理解其底层实现。

5)  易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大降低了数据冗余和数据不一致的概率。


关系型数据库的缺点:

具体来说它并不擅长以下处理:

1) 大量数据的写入处理

2)为有数据更新的表做索引或表结构(schema)变更

3)字段不固定时应用

4)对简单查询需要快速返回结果的处理



(三)SQL语言

sql语言:简称结构化语言.

sql语言定义为四种类型:

1)数据查询语言DQL-Data Query Language SELECT (DQL):用来查询数据库信息,如:select,show

2)数据操纵语言DQL-Data Manipulation Language (DML):用来插入、修改、删除、查询,可以修改数据库中的数据,如:MAKE,INSERT, UPDATE, DELETE

3)数据定义语言DQL-Data Definition Language(DDL):用来建立数据库、数据对象和定义其列。如: CREATE, ALTER, DROP

4)数据控制语言DQL-Data Control Language(DCL):用来控制数据库组件的存取允许、存取权限等.如: COMMIT WORK, ROLLBACK WORK


(四)存储引擎介绍:

什么是存储引擎,存储引擎说白了就是如何存储数据,如何为存储的数据建立索引和如何更新,查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以成为表类型。

在Oracle和SQL Server等数据库中只有一个存储引擎,所有的数据存储管理机制都是一样的。MySQL数据库提供了多种存储引擎,用户可以根据不同的应用需求或场景为数据库表选择不同的存储引擎,也可以根据自己的需要编写自己的存储引擎。


(五)MySQL体系结构:

MySQL采用的是客户/服务器体系结构。因此,当你使用MySQL的时候,你实际是在使用两个程序。第一个程序是MySQL服务器程序,指的是mysqld程序,它运行在存放着你的数据库的机器上。它负责在网络上监听并处理来自客户的服务请求,根据这些请求去访问数据库的内容,再把有关信息回传给客户。另一个程序是MySQL客户程序,它们负责连接到数据库服务器,并通过向服务器发出查询命令来告知它们需要哪些信息。


MySQL与mysql的区别

为避免混淆,请注意,MySQL指的是一个完整的MySQL RDBMS,而mysql则是一个特定的客户程序的名字。它们的发音相同,但代表的却是不同的事物,所以本书要用大写和小写字母来区分它们。


了解MySql必须牢牢记住其体系结构图,Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的


1 :Connectors指的是不同语言中与SQL的交互


2 :Management Serveices & Utilities系统管理和控制工具


3: Connection Pool: 连接池。

管理缓冲用户连接,线程处理等需要缓存的需求


4 :SQL Interface: SQL接口。

接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface


5: Parser: 解析器。

SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由LexYACC实现的,是一个很长的脚本。

主要功能:

a . SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的

b.  如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的


6 :Optimizer: 查询优化器。

SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的是选取-投影-联接策略进行查询。

用一个例子就可以理解: select uid,name from user where gender = 1;

这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤

这个select查询先根据uidname进行属性投影,而不是将属性全部取出以后再进行过滤

将这两个查询条件联接起来生成最终查询结果


7 :CacheBuffer查询缓存。

如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。

这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等


8 :Engine :存储引擎。

存储引擎是MySql中具体的与文件打交道的子系统。也是Mysql最具有特色的一个地方。

Mysql的存储引擎是插件式的。它根据MySql AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫存储引擎)

现在有很多种存储引擎,各个存储引擎的优势各不一样,最常用的MyISAM,InnoDB,BDB

默认下MySql是使用MyISAM引擎,它查询速度快,有较好的索引优化和数据压缩技术。但是它不支持事务。

InnoDB支持事务,并且提供行级的锁定,应用也相当广泛。
Mysql
也支持自己定制存储引擎,甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。