加入收藏 | 设为首页 | 会员中心 | 我要投稿 南京站长网 (https://www.025zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

1、MySQL应用基础协议

发布时间:2023-01-05 07:00:42 所属栏目:MsSql教程 来源:互联网
导读:
MySQL
MySQL是一个单进程多线程模型,它内部数据的各种各样的查询管理操作都是由线程来管理,每个用户连接,通过线程来实现;
数据查询:任何程序都是一样的逻辑,所以我们在平常也可以看到

数据验证序列怎么使用_oracle 序列使用_mssql 使用序列

MySQL

MySQL是一个单进程多线程模型,它内部数据的各种各样的查询管理操作都是由线程来管理,每个用户连接,通过线程来实现;

数据查询:任何程序都是一样的逻辑,所以我们在平常也可以看到,当我们用txt打开一个有一千行文件的时候,会很慢,那是因为它首先要将它载入内存,然后予以响应,当内存不足的时候可能会造成系统卡机的情况;当我们的MySQL数据在查询的时候,MySql首先会对数据进行判断,将第一行的数据首先载入内存,然后进行判断,以此类推,直至找到数据为止;

索引:接着上面的问题,比如我们有一亿条用户数据,显然我们要将这些一亿条的用户数据全部载入内存,这很显然不是可能做到的事情,那么我们就有了新的解决办法,可以将这些用户数据通过索引的方式,索引就是一部分数据指向数据块的数据指针,在我们的MySql需要用到时,它会将一部分数据载入内存,在数据库一启动的时候,只要做了索引,我们就可以将它载入缓冲池的索引页,以便快速查询。但是这种索引的数据结构有利于查询,并不利于写入。因为每一次写入我们的Mysql系统都会做一系列的大量操作,例如判断主键的,表达式约束啊 等等等等,这些本来就是对于关系型数据库的瓶颈,再加上我们加上了索引,每次写入又多了很多操作,例如索引更新,等等

此外,可能这也难以解决我们的性能瓶颈,不过我们也可以做多级索引,可以对索引再次进行索引,做二级索引。二级索引也叫稀疏索引。还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。

大部分的操作原理都是一样,假如我们要对一个数据进行修改,那么首先会将它读入内存,在内存中进行修改,然后存入磁盘。

动作描述使用聚集索引使用非聚集索引列经常被分组排序使用使用返回某范围内的数据使用不使用一个或极少不同值不使用不使用小数目的不同值使用不使用大数目的不同值不使用使用频繁更新的列不使用使用外键列使用使用主键列使用使用频繁修改索引列不使用使用

数据库相关理论

数据模型

层次模型、网状模型、关系模型

关系模型:

二维关系:

表:row, column

索引:index

视图:view

SQL接口(Structured Query Language)

似于OS的shell接口;也提供编程功能;

ANSI: SQL标准,SQL-86, SQL-89, SQL-92, SQL-99, SQL-03, ...

DDL:Data Defined Language

CREATE, ALTER, DROP

DML: Data Manapulating Language

INSERT, DELETE, UPDATE, SELECT

编程接口

选择、循环;

SQL代码:

存储过程:procedure,一段代码执行完了就执行完了(无返回结果)

存储函数:function,一段代码执行完了就有返回结果(有返回结果)

例程

routine 存储过程+存储函数

触发器:trigger

事件调度器:event scheduler

用户和权限

用户:用户名和密码;

权限:管理类、数据库、表、字段

DBMS

MySQL:单进程,多线程

用户连接:通过线程来实现;

线程池:

SQL接口:分析器和优化器

存储引擎:任何一个关系型数据库,无论它在上层呈现的是什么,还是要存储为一个数据文件的,而存储引擎是真正的将这么一个逻辑组件转换成物理组件存储在磁盘上,而且还确保它能够支持各种高级特性的程序模块,在各种关系型数据库当中负责将数据存储在磁盘上的应用程序而且还要确保它的各种高级功能的组件都称为叫存储引擎;

InnoDB:支持事物,还支持行级锁,支持外键

MyISAM:不支持事物,不支持外键

事务(Transaction)

多个操作组织为一个整体,要么全部都执行,要么全部都不执行,如果万一执行了一般结束了,那么它会执行回滚操作。恢复原样(回滚”, rollback)。因为我们的数据库系统是并发访问的所以就有多个事物的存在。

一个存储系统是否支持事务,测试标准:

ACID:

A:原子性;

C:一致性;

I:隔离性;

D:持久性;

原子性 (要全部执行,要么全都不执行)

事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据改操作要全部执行,要么全部不执行。这种特性称为原子性。 事务的原子性要求,如果把一个事务看作是一个程序,它要么完整的被执行,要么完全执行。就是说事务的操纵序列或者完全应用到数据库或者完全不影响数据库。这种特性称为原则性 假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新。前者称事务已提交,后者称事务撤销。DBMS必须确保由成功提交的事物完成的所有操作在数据库内有完全的反映,而失败的事务对数据库完全没有影响。

一致性 (一旦事物执行失败,通过回滚操作还原)

指在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。一致性处理数据库中对所有语义约束的保护。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。例如,当数据库处于一致性状态S1时,对数据库执行一个事务,在事务执行期间假定数据库的状态是不一致的,当事务执行结束时,数据库处在一致性状态S2

隔离性 (两个事物不能同时进行)

指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被企图进行修改的事务看到 分离性是DBMS针对并发事务间的冲突提供的安全保证。DBMS可以通过加锁在并发执行的事务间提供不同级别的分离。假如并发交叉执行的事务没有任何控制。操纵相同的共享对象的多个并发事务的执行可能引起异常情况

DBMS可以在并发执行的事务间提供不同级别的分离。分离的级别和并发事务的吞吐量之间存在反比关系。较多事务的可分离性可能会带来较高的冲突和较多的事务流产。流产的事务要消耗资源,这些资源必须要重新被访问。因此,确保高分离级别的DBMS需要更多的开销

持久性 (一旦事物执行完成了,就立即将结果进程持久存储)

持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库数据的改变应该是永久性的,耐得住任何系统故障。持久性通过数据库备份和恢复来保证 持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即对已提交事务的更新恢复。一旦一个事务被提交,DBMS必须保证提供适当的冗余,使其耐的住系统故障。所以,持久性主要在于DBMS的恢复性能

锁管理器

例如,当多个事物执行的时候,一个要写入,一个要读取。那么我们可以将写入操作的事物进行加锁,而后等写入操作完成之后,再去执行我们的读取操作。

约束

主键约束:一个或多个字段的组合,填入主键中的数据,必须不同于已存在的数据;不能为空;PRIMARY KEY

外键约束:一个表中某字段中能插入的数据,取决于另外一张表的主键中的数据;(两个表中的此字段必须都是主键)FOREIGN KEY;

唯一键约束:一个或多个字段的组合,填入惟一键中的数据,必须不同于已存在的数据;可以为空,可以有多个;UNIQUE KYE

表达式约束:假如一个表中的字段是表示年龄的,我们约束它不可大于100,这叫做表达式约束Check;

索引

从物理的角度来讲,它是为了能快速检索一个或多个表中数据的结构,将表中的某一个或某些字段抽取出来,单独将其组织一个独特的数据结构中;注意:有助于读请求,但不利于写请求;

键一定是索引,索引未必是键

索引类型:

聚集索引、非聚集索引:索引是否与数据存在一起;

主键索引、辅助索引

稠密索引、稀疏索引:是否索引了每一个数据项;

BTREE(B+)、HASH、R Tree、FULLTEXT

BTREE:左前缀:只把整个字段的最左侧第几个字段拿出来做索引;

对索引而言,它的存在目的是为了提速查询的,我们通常在定义查询语句的时候都会使用where来进行过滤条件,所以我们构建索引时,需要构建在我们经常使用where过滤的字段上,而不是随意的创建索引;用不到的索引不但没有好处,而且还有坏处,会降低性能;

单建索引:对单个字段构建索引;

复合索引:对多个字段进行构建索引,而复合索引,是有次序的,把ID字段放在前面和吧NAME字段放在前面是不一样的,因为它是做前缀的;

关系运算

选择:挑选出符合条件的行;

投影:挑选出符合需要的列;

连接:将多张表关联起来;

数据抽象

物理层:决定数据的存储格式,即如何将数据组织成为物理文件;

逻辑层:描述DB存储什么数据,以及数据间存在什么样的关系;

视图层:描述DB中的部分数据;

关系模型的分类

实体-关系模型

基于对象的关系模型

半结构化关系模型

MariaDB的特性

插件式存储引擎:存储管理器有多种实现版本,彼此间的功能和特性可能略有区别;用户可根据需要灵活选择,可以以插件的方式接入;

存储引擎也称为“表类型”;

(1) 比Mysql支持更多的存储引擎;

MyISAM:不支持事务;

MyISAM --> Aria

(MariaDB)InnoDB --> XtraDB :支持事务;

(2) 诸多扩展和新特性;

(3) 提供了较多的测试组件;

(4) truly open source;

MySQL执行过程

当一个客户端请求进来的时候,首先靠我们的连接线程来进程维护,它支持多并发,而后如果是查询类的请求,那么首先查询MySQL内建的查询缓存实现结果复用,这是MySQL性能之所这么好的一个主要组件,它依然是键值类型的存储,将用户的查询语句做hash计算结果作为key得到值作为value。如果未能命中,那么查询请求交由分析器进行分析生成执行逻辑(用户给的是一个执行语句,可能有很多种完成查询的方法,那么我们就需要选择出一种最优的路径,哪一个更快,更降低资源消耗)mssql 使用序列,而后选择的结果交由优化器进行查询语句优化,可能我们的写的语句的逻辑在性能上可能不够好,可以使用优化器进行一个改写。优化完成之后就交由执行引擎执行了。对于我们的MySQL来讲,我们叫做存储引擎,它是将我们以上的组件实现的操作得以真正实现的组件,包括事物如何保证原子性,一致性... 如何实现行级锁都是靠存储引擎来实现,所以站在这个角度来讲上层我们可以理解为是承接客户端一侧访问,并展现为一个关系模型面貌来,而底下则是为了启下的把呈现出的内容真正转为物理结构模型,如图。

oracle 序列使用_数据验证序列怎么使用_mssql 使用序列

(编辑:南京站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!