课程目标:

一、MySQL的体系结构

MySQL体系结构-总图

分解图:

MySQL体系结构2-连接池

 

####1.1 客户端(连接者)

1.2 连接处理层

作用:管理和缓冲用户连接,为客户端请求做连接处理。

../.pictures/连接池.png' alt='连接池' referrerPolicy='no-referrer' />

作用:接受用户的SQL请求,查询分析,权限处理,优化,结果缓存等。

MySQL体系结构3-sql处理层

1.3 存储引擎层

  1. 存储引擎说白了就是==如何管理操作数据==(存储数据、如何更新、查询数据等)的==一种方法和机制==。
  2. 在MySql数据库中提供了==多种存储引擎,==各个存储引擎的优势各不一样。
  3. 用户可以根据不同的需求为数据表选择不同的存储引擎,也可以根据自己的需要编写自己的存储引擎。
  4. 甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。

其他存储引擎:

1.4 存储层

作用:

主要用来存储MySQL的一些数据文件,各种日志文件等物理文件。支持各种文件系统,如ext2~ext4,ntfs,nfs,nas等。

总结:

  1. MySQL整体逻辑结构分为哪几层?
  2. 每一层是如何工作的?
  3. MySQL5.5版本以后默认的存储引擎是哪个?有什么特点?

二、MySQL数据库物理文件

1.1 常见的日志文件

日志类型

1.2 常见的数据文件

  1. .frm文件: 不论是什么存储引擎,每一个表都会有一个以表名命名的.frm文件,与表相关的==元数据(meta)信息==都存放在此文件中,包括==表结构的定义==信息等。
  2. .MYD文件: myisam存储引擎专用,存放myisam表的数据(data)。每一个myisam表都会有一个.MYD文件与之呼应,同样存放在所属数据库的目录下 .
  3. .MYI文件: 也是myisam存储引擎专用,存放myisam表的索引相关信息。对于myisam存储引擎来说,可以被缓存(cache)的内容主要就是来源于.MYI文件中。 每一个myisam表对应一个.MYI文件.
  4. .ibd文件和ibdata文件: 存放innoDB的数据文件(包括索引)。innoDB存储引擎有两种表空间方式:独享表空间和共享表空间。
  1. db.opt文件: 此文件在每一个==自建的库==里都会有,记录这个库的默认使用的==字符集和校验规==。

三、MySQL数据库概念名词

1. 什么是MySQL数据库?

数据库(database): 操作系统或存储上的==数据文件的集合==。mysql数据库中,数据库文件可以是* .frm、.MYD、.MYI、*.ibd等结尾的文件, 不同存储引擎文件类型不同。

2. 什么是MySQL数据库实例?

数据库实例(instance): 由==后台进程或者线程==以及一个==共享内存区==组成。共享内存可以被运行的后台线程所共享。 数据库实例才是真正操作数据库的。

注意:MySQL的后台守护程序mysqld是单进程多线程的工作模式。

3. 什么是MySQL数据库服务器?

数据库服务器(database server):部署==安装数据库实例==的服务器。

4. 数据库和数据库实例之间的关系是什么?

通常情况下,数据库实例和数据库是一一对应的关系,也就是==一个数据库实例对应一个数据库==; 但是,在集群环境中存在==多个数据库实例共同使用一个数据库==。

四、MySQL中的SQL语句

1. 什么是SQL?

SQL 是 Structure Query Language(==结构化查询语言==)的缩写,它是使用==关系模型的数据库应== ==用语言==,由 IBM 在 20 世纪 70 年代开发出来,作为 IBM 关系数据库原型 System R 的原型关 系语言,实现了关系数据库中的信息检索。

20 世纪 80 年代初,美国国家标准局(ANSI)开始着手制定 SQL 标准,最早的 ANSI 标准于 1986 年完成,就被叫作 SQL-86。标准的出台使 SQL 作为标准关系数据库语言的地位得到了 加强。SQL 标准目前已几经修改更趋完善。

正是由于 SQL 语言的标准化,所以大多数关系型数据库系统都支持 SQL 语言,它已经发展 成为多种平台进行交互操作的底层会话语言。

2. SQL语句的分类

3. MySQL中如何求帮助

五、MySQL数据库基本操作

1. 常用的一些命令

2. 数据库基本操作

3. 数据表基本操作

#####3.1 常见的数据类型

3.1.1 数值类型

常见的数值类型

数据类型-整数

DECIMALNUMERIC 类型的存储==精确的数值数据==。使用这些类型时,重要的是要保留==精确的精度==,例如使用货币数据。在MySQL中, NUMERIC被作为DECIMAL来应用,所以下面的举例DECIMAL同样适用于 NUMERIC

举例:

FLOATDOUBLE类型代表近似数字数据值。MySQL对于单精度值使用四个字节,对于双精度值使用八个字节。 FLOAT单精度浮点数精确到约7位小数,DOUBLE双精度浮点数精确到大约15位小数 。FLOAT类型会随着数值的增大精度会减小。

举例:

总结:

数值类型精度存储空间精确性
FLOAT单精度4字节
DOUBLE双精度8字节低,比float高
DECIMAL高精度变长

######3.1.2 字符串类型

常见的字符类型

CHAR类型的字符串为定长.长度范围是0到255之间的任何值.占用定长的存储空间,不足的部分用==空格==填充;读取时删掉后面的空格。

存储空间

CHAR(M)类型的存储空间和字符集有关系,一个中文在utf8字符集中占用3个bytes、gbk占用2个bytes、数字和字符统一用一个字符表示。 存储机制:

在不够M长度时,MySQL在存储数据时,需要填充特殊的空格.

举例说明:

name CHAR(M),M表示字符数

VARCHAR是变长存储,仅使用必要的存储空间.

存储空间:

VARCHAR(M)类型的存储空间和字符集有关系,一个中文在utf8字符集中占用3个bytes、gbk统一占用2个bytes、数字和字符一个字符表示。

存储机制:

VARCHAR(M)字段存储实际是从第二个字节开始存储,然后用1到2个字节表示实际长度,剩下的才是可以存储数据的范围,因此最大可用存储范围是65535-3=65532字节;

第一个字节标识是否为空.(长度小于255字节,使用一个字节来表示长度;大于255字节使用两个字节来表示长度)。

举例说明:

BLOB:保存二进制的大型数据(字节串),没有字符集,eg:图片、音频视频等。

TEXT:保存非二进制字符串(字符串);有一个字符集。

BINARY和VARBINARY:类似CHAR和VARCHAR;保存字节字符串,而不是字符字符串,这意味着它们没有字符集

在下面的表中,M表示非二进制字符串类型和二进制字符串类型的字节数的声明列长度。L表示给定字符串值的字节的实际长度。

string-type

 

3.1.3 日期类型

日期类型

The DATE type is used for values with a date part but no time part. MySQL retrieves and displays DATE values in'YYYY-MM-DD' format. The supported range is '1000-01-01' to '9999-12-31'.

The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displaysDATETIME values in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.

The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.

注意:

Invalid DATEDATETIME, or TIMESTAMP values are converted to the “zero” value of the appropriate type ('0000-00-00' or '0000-00-00 00:00:00').

无效的日期,日期时间等会被替换成‘0000-00-00’或‘0000-00-00 00:00:00’

MySQL retrieves and displays TIME values in 'HH:MM:SS' format (or 'HHH:MM:SS' format for large hours values).TIME values may range from '-838:59:59' to '838:59:59'.

说明:小时部分可以是这么大,因为可以使用TIME类型不仅代表一个时间(必须小于24小时),而且可以表示运行时间或两个事件之间的时间间隔(可能大于24小时,甚至负数)。

==注意:==

TIME这一列如果存储缩写,需要注意mysql的解释方式。无效的时间值会被转换成'00:00:00' 。

'11:12' means '11:12:00', not '00:11:12'.

'12' and 12 are interpreted as '00:00:12'.

YEAR(4) and YEAR(2) differ in display format, but have the same range of values.

For 4-digit format, MySQL displays YEAR values in YYYY format, with a range of 1901 to 2155, or 0000.

For 2-digit format, MySQL displays only the last two (least significant) digits; for example, 70 (1970 or 2070) or 69 (2069).

无效的值将会被转换成'0000'.

4. 用户权限管理

4.1 创建用户
4.2 用户授权

5. 补充总结

思考:

delete、truncate、drop有什么区别?

六、查询语句

 

课堂练习:

查询英语前三名

查询总分,以降序排列

查询总分第一名

查询英语最高分的姓名及分数

查询总成绩的平均分第一名: