Vue3源码解析,打造自己的Vue3框架无密

#1

download:Vue3源码解析,打造自己的Vue3框架无密

整理相关的数据库知识点,帮你获得心仪的优惠。
1.数据库事务
1.1什么是数据库事务?
事务是指一组逻辑上相关的操作,这些操作要么全部完成,要么都没有完成。
它是事务管理系统执行过程中的逻辑工作单元,是用户自定义的操作序列。这些操作要么全部执行,要么都不执行,是一个不可分割的工作单元。
1.2.交易的特征
交易的ACID属性:

原子性:事务是不可分割的工作单元。一个事务中包含的所有操作,不是完成就是未完成,不会在中间环节结束。
一致性:事务必须将数据库从一种一致性状态更改为另一种一致性状态。
隔离:一个事务的执行不能被其他事务干扰。当并发执行多个事务时,这些事务应该相互隔离。
持久性:一旦事务被提交,它的更改将永久存储在数据库中,即使数据库失败也不会丢失。

1.3.事务的隔离级别
事务的隔离级别指的是在事务期间数据修改被其他公司看到的程度。从最低到最高的事务隔离级别是:

未提交读取:一个事务可以读取由另一个事务修改但尚未提交的数据。
Read Committed:一个事务只能读取另一个事务已经提交的数据。
可重复读取(Repeatable Read ):同一数据在事务执行过程中被多次读取,结果总是一致的。在可重复读取隔离级别下,不允许幻像读取,但允许不可重复读取。
Serializable:所有事务逐个执行,事务不能并发执行。

隔离级别越高,事务之间的并发越少,但并发性能越差。
1.4.事务的并发性
事务的并发问题主要如下:

脏读:一个事务读取另一个事务的未提交数据。
不可重复读取:一个事务多次读取相同的数据,结果不一致。
幻像读取:一个事务多次读取同一范围的数据,结果不一致。
丢失更新:一个事务读取另一个事务提交的数据。

不可重复读数和幻象读数的区别:

不可重复读取是指同一数据在一个事务中被多次读取,结果不一致;
幻读是指在一个事务中多次读取同一范围的数据,结果不一致。

1.5.交易的并行处理
交易的并发处理主要包括以下内容:

序列化:所有事务都是逐个执行的,事务不能并发执行。
乐观锁定:当提交一个事务时,检查数据是否被其他事务修改过,如果是,放弃提交,否则提交该事务。
悲观锁:当一个事务被执行时,数据被锁定,在该事务结束之前,其他事务不能修改数据。
两阶段锁定协议:在事务执行之前,数据被锁定,直到事务完成。
多版本并发控制(MVCC):读取数据时,读取数据的当前版本,而不是最新版本。
时间戳:事务提交时,检查数据是否被其他事务修改过,如果是,放弃提交,否则提交事务。
快照隔离:在事务执行之前,数据被锁定,直到事务结束。

2.数据库索引
2.1.指数的作用
索引的功能如下:

加快数据检索;
索引可以帮助我们避免排序和分组操作;
随机I/O可以通过索引变成顺序I/O;
索引可以帮助我们避免表之间的连接操作。

2.2.指数分类
主要有以下几类索引:

单值索引:索引列只包含一个值。
多值索引:索引列包含多个值。
唯一索引:索引列的值必须是唯一的,但允许空值。
主键索引:一个表只能有一个主键索引。主键索引的值必须是唯一的,不允许有空值。
复合索引:索引列是多个列的组合。
覆盖:索引包含所有需要查询的列。
全文索引:索引列是全文索引列。
哈希:索引列是哈希索引列。
空间:索引列是一种空间数据类型。
其他索引:索引列是其他数据类型。

2.3.索引的优点和缺点
索引的优点和缺点如下:

优势:

索引可以大大加快数据检索速度;
索引可以帮助我们避免排序和分组操作;
索引可以把随机I/O变成顺序I/O;
索引可以帮助我们避免表之间的连接操作。

缺点:

索引会占用物理空间,建立过多的索引会浪费物理空间;
索引会减慢写入数据的速度,因为数据库服务器在写入数据时也需要维护索引数据;
索引会减慢更新数据的速度,因为数据库服务器在更新数据时也需要维护索引数据;
如果频繁添加或删除表中的数据,索引将无效,从而降低查询速度。

2.4.索引的使用
索引的使用主要如下:

使用Overwrite Index: Index可以帮助我们避免排序和分组操作。
使用复合索引:索引列是多个列的组合。
使用索引下推:索引可以帮助我们避免表之间的连接操作。

3.数据库的类型
3.1.数据库的分类
数据库的分类主要包括以下内容:

关系数据库:关系数据库是指使用关系模型组织数据的数据库。关系模型是基于二维表的数据模型。二维表中的每一行代表一条记录,每一列代表一个属性。二维表之间的关系可以用行之间的关系来表示。
非关系数据库:非关系数据库是指不使用关系模型组织数据的数据库。非关系数据库的数据模型可以是键值对、文档、图形、列存储等。
文档数据库:文档数据库是指使用文档模型组织数据的数据库。文档模型是基于文档的数据模型,文档是一个自包含的数据结构。文档中的数据可以是键值对、文本、二进制数据等。

3.2.关系数据库的分类
主要有以下类型的关系数据库:

MySQL:MySQL是一个关系数据库,它是一个关系数据库管理系统。它是由瑞典的MySQL AB公司开发的,现在属于甲骨文公司。
Oracle:Oracle是一个关系数据库。它是一个关系数据库管理系统,由美国Oracle公司开发。
SQL Server:SQL Server是一个关系数据库。它是一个关系数据库管理系统,由美国微软公司开发。
PostgreSQL:PostgreSQL是一个关系数据库。它是一个关系数据库管理系统,由美国PostgreSQL全球开发集团开发。
DB2:DB2是一个关系数据库。它是一个关系数据库管理系统,由美国IBM公司开发。
SQLite:SQLite是一个关系数据库。它是由加拿大加州大学开发的一个关系数据库管理系统。
Maria DB: Maria DB是关系数据库,是由瑞典Maria DB基金会公司开发的关系数据库管理系统。
MemSQL:MemSQL是一个关系数据库。它是一个关系数据库管理系统,由美国MemSQL公司开发。
H2: H2是一个关系数据库,是一个关系数据库管理系统,由德国H2数据库引擎公司开发。
HSQLDB:HSQLDB是一个关系数据库。它是一个关系数据库管理系统,由美国HSQLDB公司开发。
Derby:Derby是一个关系数据库。它是一个关系数据库管理系统,由美国Apache Derby公司开发。
火鸟:火鸟是一个关系数据库。它是一个关系数据库管理系统,由美国火鸟基金会公司开发。
Sybase:Sybase是一个关系数据库,它是一个关系数据库管理系统,由美国Sybase公司开发。
Informix:Informix是一个关系数据库。它是一个关系数据库管理系统,由美国Informix公司开发。
Access:Access是一个关系数据库。它是一个关系数据库管理系统,由美国微软公司开发。
Teradata:Teradata是关系数据库,是美国Teradata公司开发的关系数据库管理系统。
Vertica:Vertica是一个关系数据库。这是一个关系数据库管理系统,由美国的Vertica Systems公司开发。
Netezza:Netezza是关系数据库,是美国Netezza公司开发的关系数据库管理系统。
Greenplum:Greenplum是关系数据库,是美国Greenplum公司开发的关系数据库管理系统。

这些关系数据库可能缺失,个人统计也不是很全面,可能会有错误。欢迎大家补充。

3.3.非关系数据库的分类
主要有以下类型的非关系数据库:

Redis:Redis是一个非关系数据库。这是一个基于内存的键值对数据库,用C语言编写。
MongoDB:MongoDB是一个非关系数据库。这是一个基于文档的数据库,用C++语言编写。
HBase:HBase是一个非关系数据库。它是一个基于列存储的数据库,用Java语言编写。
Secondary: Secondary是非关系数据库。它是用Java语言编写的基于图形的数据库。
Elasticsearch:Elasticsearch是一个非关系数据库。这是一个基于文档的数据库,用Java语言编写。
Memcached:Memcached是一个非关系数据库。这是一个基于内存的键值对数据库,用C语言编写。
Cassandra:Cassandra是一个非关系数据库。它是一个基于列存储的数据库,用Java语言编写。
CouchDB:CouchDB是一个非关系数据库。这是一个基于文档的数据库,用Erlang语言编写。
Riak:Riak是一个非关系数据库。这是一个基于键值对的数据库,用Erlang语言编写。
Hadoop:Hadoop是非关系数据库。这是一个基于文件的数据库,用Java语言编写。
influre DB:influre DB是一个非关系数据库。它是一个基于时间序列的数据库,用Go语言编写。
Level DB: Level DB是一个非关系数据库。它是一个基于键值对的数据库,用C++语言编写。
RocksDB:RocksDB是一个非关系数据库。它是一个基于键值对的数据库,用C++语言编写。
Tarantool:Tarantool是一个非关系数据库。这是一个基于键值对的数据库,用C语言编写。
TimescaleDB:TimescaleDB是一个非关系数据库。它是一个基于时间序列的数据库,用C语言编写。
VoltDB:VoltDB是一个非关系数据库。这是一个基于内存的键值对数据库,用Java语言编写。
Aerospike:Aerospike是一个非关系数据库。这是一个基于内存的键值对数据库,用C语言编写。
ArangoDB:ArangoDB是一个非关系数据库。它是一个基于文档的数据库,用C++语言编写。
Foundation DB: Foundation DB是一个非关系数据库。它是一个基于键值对的数据库,用C++语言编写。
OrientDB:OrientDB是一个非关系数据库。它是用Java语言编写的基于图形的数据库。

非关系数据库也就是我们常说的NoSQL数据库。它们的特点是不支持SQL语句,但是支持各种API,比如Redis支持Redis命令,MongoDB支持MongoDB命令等等。

3.4.文档数据库
文档数据库是一种非关系数据库,是基于文档的数据库。事实上,文档数据库与上述非关系数据库的区别在于,文档数据库的数据是以文档的形式存储的,而非关系数据库的数据是以键值对的形式存储的。
文档数据库的数据以文档的形式存储,文档是一种数据结构。它是一种类似于JSON的数据结构。它是键-值对的数据结构,但它的值可以是任何类型的数据,如字符串、数字、数组、对象等。
文件数据库包括但不限于:

MongoDB:MongoDB是一个基于文档的数据库,用C++语言编写。
CouchDB:CouchDB是一个基于文档的数据库,用Erlang语言编写。
Couchbase:Couchbase是一个基于文档的数据库,用C++语言编写。
ArangoDB:ArangoDB是一个基于文档的数据库,用C++语言编写。
Foundation DB: Foundation DB是一个基于文档的数据库,用C++语言编写。
OrientDB:OrientDB是一个基于文档的数据库,用Java语言编写。
RethinkDB:RethinkDB是一个基于文档的数据库,用C++语言编写。
Mark Logic: Mark Logic是一个基于文档的数据库,用Java语言编写。

4.InnoDB和myisam的区别
4.1.innodb
InnoDB是MySQL 5.5之后默认的存储引擎,是一个事务型数据库。它支持事务、行级锁、外键、崩溃恢复和并发控制。
优势:

支持事务、行级锁、外键、崩溃恢复和并发控制。
支持MVCC,多版本并发控制,可以有效解决魔读问题。
支持B+树索引和哈希索引。
支持全文索引。
支持自增长列。
支持外键。

缺点:

它占用了大量的磁盘空间,因为它是以页为单位存储的,而且页的大小是固定的,通常是16KB,所以如果数据量很小,就会造成磁盘空间的浪费。
不支持全文索引的排序、分组和限制,不支持全文索引的模糊查询等。

4.2.米沙姆
MyISAM是MySQL 5.5之前的默认存储引擎。它是一个非事务数据库。它不支持事务、行级锁、外键、崩溃恢复和并发控制。
优势:

占用的磁盘空间小,因为是以表为单位存储的,表的大小不固定,所以如果数据量小,会造成磁盘空间的浪费。
支持全文索引的排序、分组和限制,全文索引的模糊查询等。

缺点:

不支持事务、行级锁、外键、崩溃修复功能和并发控制。
不支持MVCC和多版本并发控制,无法有效解决魔读问题。
不支持B+树索引和哈希索引。
支持非自增长列。
不支持外键。

4.3.InnoDB和myisam的区别
它们的区别主要如下:

Innodb支持事务,myisam不支持。
Innodb支持行级锁,但myisam不支持。
Innodb支持外键,myisam不支持。
Innodb支持崩溃修复能力和并发控制,而myisam不支持。
Innodb支持MVCC和多版本并发控制,可以有效解决魔读问题。myisam不支持MVCC和多版本并发控制,无法有效解决魔读问题。
Innodb支持B+树索引和hash索引,myisam不支持。
Innodb支持自生长列,但myisam不支持。
Innodb支持外键,myisam不支持。
Innodb占用大量磁盘空间,而myisam占用少量磁盘空间。
Innodb支持全文索引的排序、分组和限制,全文索引的模糊查询,myisam支持全文索引的排序、分组和限制,全文索引的模糊查询等。

可以看到上面列出的innodb和myisam的优缺点。它们的优缺点是相反的,所以在实际开发中,我们需要根据自己的业务场景选择合适的存储引擎。
0.3.group by和having之间的区别

Group语句用于对查询结果进行分组。
Having语句用于过滤分组结果。
Group语句必须在having语句之前。
Having语句必须在order by语句之前。
Group语句可以使用聚合函数,having语句不能使用聚合函数。