@@ -130,7 +130,7 @@ MySQL配置:
130130
131131# # 单表
132132
133- # ## SQL介绍
133+ # ## SQL
134134
135135- SQL
136136
@@ -174,7 +174,7 @@ MySQL配置:
174174
175175# ## DDL
176176
177- # ### 操作数据库
177+ # ### 数据库
178178
179179* R(Retrieve):查询
180180
@@ -283,7 +283,7 @@ MySQL配置:
283283
284284
285285
286- # ### 操作数据表
286+ # ### 数据表
287287
288288- R(Retrieve):查询
289289
@@ -923,7 +923,7 @@ LIMIT:分页限定
923923
924924
925925
926- # ## 主键自增约束
926+ # ## 主键自增
927927
928928主键自增约束可以为空,并自动增长。删除某条数据不影响自增的下一个数值,依然按照前一个值自增。
929929
@@ -1088,14 +1088,22 @@ LIMIT:分页限定
10881088
10891089
10901090
1091- # ## 外键级联操作
1091+ # ## 外键级联
10921092
1093- 级联操作:当把主表中的数据进行删除或更新时,从表中有关联的数据也会随之删除(一般不建议使用)
1093+ 级联操作:当把主表中的数据进行删除或更新时,从表中有关联的数据的相应操作,包括 RESTRICT、CASCADE、SET NULL 和 NO ACTION
1094+
1095+ * RESTRICT 和 NO ACTION相同, 是指限制在子表有关联记录的情况下, 父表不能更新
1096+
1097+ * CASCADE 表示父表在更新或者删除时,更新或者删除子表对应的记录
1098+
1099+ * SET NULL 则表示父表在更新或者删除的时候,子表的对应字段被SET NULL
1100+
1101+ 级联操作:
10941102
10951103* 添加级联更新
10961104
10971105 ` ` ` mysql
1098- ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主表主键列名) ON UPDATE CASCADE;
1106+ ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (本表外键列名) REFERENCES 主表名(主表主键列名) ON UPDATE [ CASCADE | RESTRICT | SET NULL] ;
10991107 ` ` `
11001108
11011109* 添加级联删除
@@ -2595,7 +2603,8 @@ LOOP 实现简单的循环,退出循环的条件需要使用其他的语句定
25952603 - 提交:没出现问题,数据进行更新
25962604 - 回滚:出现问题,数据恢复到开启事务时的状态
25972605
2598-
2606+
2607+ 事务操作:
25992608
26002609* 开启事务
26012610
@@ -2745,27 +2754,37 @@ LOOP 实现简单的循环,退出循环的条件需要使用其他的语句定
27452754
27462755### 体系结构
27472756
2748- 体系结构详解
2757+ 体系结构详解:
2758+
2759+ * 第一层:网络连接层
2760+ * 一些客户端和链接服务,包含本地socket 通信和大多数基于客户端/服务端工具实现的 TCP/IP 通信,主要完成一些类似于连接处理、授权认证、及相关的安全方案
2761+ * 在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程
2762+ * 在该层上实现基于SSL的安全链接,服务器也会为安全接入的每个客户端验证它所具有的操作权限
27492763
2750- - 客户端连接
2751- - 支持接口:支持的客户端连接,例如C、Java、PHP等语言来连接MySQL数据库
2752- - 第一层:网络连接层
2753- - 连接池:管理、缓冲用户的连接,线程处理等需要缓存的需求。
2754- - 例如:当客户端发送一个请求连接,会从连接池中获取一个连接进行使用。
27552764- 第二层:核心服务层
2756- - 管理服务和工具:系统的管理和控制工具,例如备份恢复、复制、集群等。
2757- - SQL接口:接受SQL命令,并且返回查询结果。
2758- - 查询解析器:验证和解析SQL命令,例如过滤条件、语法结构等。
2759- - 查询优化器:在执行查询之前,使用默认的一套优化机制进行优化sql语句
2760- - 缓存:如果缓存当中有想查询的数据,则直接将缓存中的数据返回。没有的话再重新查询!
2765+ * 完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行
2766+ * 所有跨存储引擎的功能在这一层实现,如过程、函数等
2767+ * 在该层服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定表的查询顺序,是否利用索引等, 最后生成相应的执行操作
2768+ * 服务器还会查询内部的缓存,如果缓存空间足够大,可以在大量读操作的环境中提升系统的性能
27612769- 第三层:存储引擎层
2762- - 插件式存储引擎:管理和操作数据的一种机制,包括(存储数据、如何更新、查询数据等)
2770+ - 存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信
2771+ - 不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎
27632772- 第四层:系统文件层
2773+ - 数据存储层,主要是将数据存储在文件系统之上,并完成与存储引擎的交互
27642774 - 文件系统:配置文件、数据文件、日志文件、错误文件、二进制文件等等的保存
27652775
2766- ![ ] ( https://gitee.com/seazean/images/raw/master/DB/MySQL体系结构 .png )
2776+ ![ ] ( https://gitee.com/seazean/images/raw/master/DB/MySQL-体系结构 .png )
27672777
2778+ 整个MySQL Server由以下组成
27682779
2780+ - Connection Pool : 连接池组件
2781+ - Management Services & Utilities : 管理服务和工具组件
2782+ - SQL Interface : SQL接口组件
2783+ - Parser : 查询分析器组件
2784+ - Optimizer : 优化器组件
2785+ - Caches & Buffers : 缓冲池组件
2786+ - Pluggable Storage Engines : 存储引擎
2787+ - File System : 文件系统
27692788
27702789
27712790
@@ -2775,17 +2794,19 @@ LOOP 实现简单的循环,退出循环的条件需要使用其他的语句定
27752794
27762795### 存储引擎
27772796
2797+ 对比其他数据库,MySQL的架构可以在不同场景应用并发挥良好作用,主要体现在存储引擎,插件式的存储引擎架构将查询处理和其他的系统任务以及数据的存储提取分离,可以针对不同的存储需求可以选择最优的存储引擎
2798+
27782799存储引擎的介绍:
27792800
2780- - MySQL数据库使用不同的机制存取表文件 , 机制的差别在于不同的存储方式、索引技巧、锁定水平等不同的功能和能力,在MySQL中 , 将这些不同的技术及配套的功能称为** 存储引擎**
2781- - Oracle , SqlServer等数据库只有一种存储引擎 , 而MySQL针对不同的需求, 配置不同的存储引擎 , 就会让数据库采取了不同的处理数据的方式和扩展功能。
2801+ - MySQL数据库使用不同的机制存取表文件 , 机制的差别在于不同的存储方式、索引技巧、锁定水平等不同的功能和能力,在MySQL中, 将这些不同的技术及配套的功能称为** 存储引擎**
2802+ - Oracle , SqlServer等数据库只有一种存储引擎,MySQL提供了插件式的存储引擎架构,所以MySQL存在多种存储引擎 , 就会让数据库采取了不同的处理数据的方式和扩展功能
27822803- 在关系型数据库中数据的存储是以表的形式存进行,所以存储引擎也称为表类型(存储和操作此表的类型)
27832804- 通过选择不同的引擎,能够获取最佳的方案, 也能够获得额外的速度或者功能,提高程序的整体效果。
27842805
27852806MySQL支持的存储引擎:
27862807
2787- - MySQL5.7支持的引擎包括 :InnoDB、MyISAM、MEMORY、Archive、Federate、CSV、BLACKHOLE等
2788- - 常用引擎:InnoDB、MyISAM、MEMORY
2808+ - MySQL支持的引擎包括 :InnoDB、MyISAM、MEMORY、Archive、Federate、CSV、BLACKHOLE等
2809+ - MySQL5.5之前的默认存储引擎是MyISAM,5.5之后就改为了InnoDB
27892810
27902811
27912812
@@ -2795,41 +2816,73 @@ MySQL支持的存储引擎:
27952816
27962817### 引擎对比
27972818
2798- - MyISAM存储引擎
2819+ MyISAM存储引擎
2820+
2821+ * 特点:不支持事务和外键,读取速度快,节约资源
2822+ * 应用场景:查询和插入操作为主,只有很少更新和删除操作,并对事务的完整性、并发性要求不高
2823+ * 存储方式:
2824+ * 每个MyISAM在磁盘上存储成3个文件,其文件名都和表名相同,拓展名不同
2825+ * 表结构保存在.frm文件中,表数据保存在.MYD文件中,索引保存在.MYI文件中
2826+
2827+ InnoDB存储引擎:(MySQL5.5版本后默认的存储引擎)
27992828
2800- * 特点:不支持事务和外键,读取速度快,节约资源
2801- * 应用场景:查询和插入操作为主,只有很少更新和删除操作,并对事务的完整性、并发性要求不高
2802- * 结构:表结构保存在.frm文件中,表数据保存在.MYD文件中,索引保存在.MYI文件中
2829+ - 特点:支持事务和外键操作,支持并发控制。对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引
2830+ - 应用场景:对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,读写频繁的操作
2831+ - 存储方式:
2832+ - 使用共享表空间存储, 这种方式创建的表的表结构保存在.frm文件中, 数据和索引保存在 innodb_data_home_dir 和 innodb_data_file_path定义的表空间中,可以是多个文件
2833+ - 使用多表空间存储, 这种方式创建的表的表结构存在 .frm 文件中,但每个表的数据和索引单独保存在 .ibd 中
28032834
2804- - InnoDB存储引擎:(MySQL5.5版本后默认的存储引擎)
2835+ MEMORY存储引擎:
28052836
2806- - 特点:支持事务和外键操作,占用磁盘空间大,支持并发控制
2807- - 应用场景:对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,读写频繁的操作
2808- - 结构 :表结构保存在.frm文件中,如果是共享表空间,数据和索引保存在 innodb_data_home_dir 和 innodb_data_file_path定义的表空间中,可以是多个文件。如果是多表空间存储,每个表的数据和索引单独保存在 .ibd 中
2837+ - 特点:每个MEMORY表实际对应一个磁盘文件,格式是.frm ,该文件中只存储表的结构,表数据保存在内存中,且默认使用HASH索引,这样有利于数据的快速处理,在需要快速定位记录可以提供更快的访问,但是服务一旦关闭,表中的数据就会丢失,数据存储不安全
2838+ - 应用场景:通常用于更新不太频繁的小表,用以快速得到访问结果,类似缓存
2839+ - 存储方式 :表结构保存在.frm中
28092840
2810- - MEMORY存储引擎:
2841+ MERGE存储引擎
2842+
2843+ * 特点:
2844+
2845+ * 是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,通过将不同的表分布在多个磁盘上,有效的改善MERGE表的访问效率
2846+ * MERGE表本身并没有存储数据,对MERGE类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的MyISAM表进行的。
2847+
2848+ * 应用场景:将一系列等同的MyISAM表以逻辑方式组合在一起,并作为一个对象引用他们,适合做数据仓库
2849+
2850+ * 操作方式:
2851+
2852+ * 插入操作是通过INSERT_METHOD子句定义插入的表,使用 FIRST 或 LAST 值使得插入操作被相应地作用在第一或者最后一个表上;不定义这个子句或者定义为NO,表示不能对MERGE表执行插入操作
2853+ * 对MERGE表进行DROP操作,但是这个操作只是删除MERGE表的定义,对内部的表是没有任何影响的
2854+
2855+ ``` mysql
2856+ CREATE TABLE order_1 (
2857+ )ENGINE = MyISAM DEFAULT CHARSET= utf8;
2858+
2859+ CREATE TABLE order_2 (
2860+ )ENGINE = MyISAM DEFAULT CHARSET= utf8;
2861+
2862+ CREATE TABLE order_all (
2863+ -- 结构与MyISAM表相同
2864+ )ENGINE = MERGE UNION = (order_1,order_2) INSERT_METHOD= LAST DEFAULT CHARSET= utf8;
2865+ ```
28112866
2812- - 特点:所有数据保存在内存中,在需要快速定位记录可以提供更快的访问,但是不安全
2813- - 应用场景:通常用于更新不太频繁的小表,用以快速得到访问结果
2814- - 结构:表结构保存在.frm中
2867+ ![ ] ( https://gitee.com/seazean/images/raw/master/DB/MySQL-MERGE.png )
28152868
2816- | 特性 | MyISAM | InnoDB | MEMORY |
2817- | ------------ | ---------------------------- | ------------- | ------------------ |
2818- | 存储限制 | 有(平台对文件系统大小的限制) | 64TB | 有(平台的内存限制) |
2819- | ** 事务安全** | ** 不支持** | ** 支持** | ** 不支持** |
2820- | ** 锁机制** | ** 表锁** | ** 表锁/行锁** | ** 表锁** |
2821- | B+Tree索引 | 支持 | 支持 | 支持 |
2822- | 哈希索引 | 不支持 | 不支持 | 支持 |
2823- | 全文索引 | 支持 | 支持 | 不支持 |
2824- | ** 集群索引** | ** 不支持** | ** 支持 ** | ** 不支持** |
2825- | 数据索引 | 不支持 | 支持 | 支持 |
2826- | 数据缓存 | 不支持 | 支持 | N/A |
2827- | 索引缓存 | 支持 | 支持 | N/A |
2828- | 数据可压缩 | 支持 | 不支持 | 不支持 |
2829- | 空间使用 | 低 | 高 | N/A |
2830- | 内存使用 | 低 | 高 | 中等 |
2831- | 批量插入速度 | 高 | 低 | 高 |
2832- | ** 外键** | ** 不支持** | ** 支持** | ** 不支持** |
2869+ | 特性 | MyISAM | InnoDB | MEMORY |
2870+ | ------------ | ---------------------------- | ------------- | ------------------ |
2871+ | 存储限制 | 有(平台对文件系统大小的限制) | 64TB | 有(平台的内存限制) |
2872+ | ** 事务安全** | ** 不支持** | ** 支持** | ** 不支持** |
2873+ | ** 锁机制** | ** 表锁** | ** 表锁/行锁** | ** 表锁** |
2874+ | B+Tree索引 | 支持 | 支持 | 支持 |
2875+ | 哈希索引 | 不支持 | 不支持 | 支持 |
2876+ | 全文索引 | 支持 | 支持 | 不支持 |
2877+ | 集群索引 | 不支持 | 支持 | 不支持 |
2878+ | 数据索引 | 不支持 | 支持 | 支持 |
2879+ | 数据缓存 | 不支持 | 支持 | N/A |
2880+ | 索引缓存 | 支持 | 支持 | N/A |
2881+ | 数据可压缩 | 支持 | 不支持 | 不支持 |
2882+ | 空间使用 | 低 | 高 | N/A |
2883+ | 内存使用 | 低 | 高 | 中等 |
2884+ | 批量插入速度 | 高 | 低 | 高 |
2885+ | ** 外键** | ** 不支持** | ** 支持** | ** 不支持** |
28332886
28342887
28352888
@@ -2845,6 +2898,7 @@ MySQL支持的存储引擎:
28452898
28462899 ``` mysql
28472900 SHOW ENGINES;
2901+ SHOW VARIABLES LIKE ' %storage_engine%' ; -- 查看Mysql数据库默认的存储引擎
28482902 ```
28492903
28502904* 查询某个数据库中所有数据表的存储引擎
0 commit comments