MySQL
文章平均质量分 88
UndefinedException
求求你们别卷了!!!
展开
-
MySQL-主从复制概述
目录一、基本概念二、原理三、同步数据一致性问题3.1 原因3.2 解决方法 如何提升数据库并发能力? 此外,一般应用对数据库而言都是“ 读多写少 ”,也就说对数据库读取数据的压力比较大,有一个思路就 是采用数据库集群的方案,做 主从架构 、进行 读写分离 ,这样同样可以提升数据库的并发处理能力。但 并不是所有的应用都需要对数据库进行主从架构的设置,毕竟设置架构本身是有成本的。 主从复制的作用: 第1个作用:读写分离 第2个作用:数据备份原创 2022-07-07 21:57:12 · 415 阅读 · 1 评论 -
MySQL-其他数据库日志
MySQL有不同类型的日志文件,用来存储不同类型的日志,分为 二进制日志 、 错误日志 、 通用查询日志 和 慢查询日志 ,这也是常用的4种。MySQL 8又新增两种支持的日志: 中继日志 和 数据定义语句日志 。使 用这些日志文件,可以查看MySQL内部发生的事情。 日志的缺点:日志功能会降低MySQL数据库的性能 ,会占用大量的磁盘空间 。 已经在《性能分析工具》章节提到 通用查询日志用来记录用户的所有操作 ,包括启动和关闭MySQL服务、所有用户的连接开始时原创 2022-07-07 20:59:37 · 300 阅读 · 0 评论 -
MySQL-多版本并发控制MVCC
MVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的并发控制 。这项技术使得在InnoDB的事务隔离级别下执行 一致性读操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值,这样在做查询的时候就不用等待另一个事务释放锁。MVCC的实现依赖于隐藏字段、Undo Log、Read View。 MVCC在MySQL InnoDB中的实现主要原创 2022-07-07 18:58:25 · 300 阅读 · 0 评论 -
MySQL-锁
在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。为保证数据一致性,需要对并发操作进行控制 ,因此产生了 锁 。同时 锁机制 也为实现MySQL 的各个隔离级别提供了保证。 锁冲突 也是影响数据库 并发访问性能 的一个重要因素。 并发事务访问相同记录的情况大致可以划分为3种: 读-读 情况,即并发事务相继 读取相同的记录 。读取操作本身不会对记录有任何影响,并不会引起什么问题,所以允许这种情况的发生。 写-写 情原创 2022-07-07 17:10:05 · 333 阅读 · 0 评论 -
MySQl-事务日志
事务的隔离性由锁机制实现。 而事务的原子性、一致性和持久性由事务的 redo 日志和undo 日志来保证。它们在存储引擎层产生。 REDO LOG 称为 重做日志 ,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。 UNDO LOG 称为 回滚日志 ,回滚行记录到某个特定版本,用来保证事务的原子性、一致性。 有的DBA或许会认为 UNDO 是 REDO 的逆过程,其实不然。 事务包含 持久性 的特性,就是说对于一个已经提交的事务,在事务原创 2022-07-05 19:18:32 · 430 阅读 · 0 评论 -
MySQL-事务的概念
在 MySQL 中,只有InnoDB 是支持事务的。 事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。 事务处理的原则:保证所有事务都作为 一个工作单元 来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交( commit ),那么这些修改就 永久 地保 存下来;要么数据库管理系统将 放弃 所作的所有 修改 ,整个事务回滚( rollback )到最初状态。 原子性(atomicity): 原子性是指事务是一原创 2022-07-05 09:44:53 · 303 阅读 · 0 评论 -
MySQL-数据库优化策略概述
1.尽可能节省系统资源 ,以便系统可以提供更大负荷的服务。(吞吐量更大) 2.合理的结构设计和参数调整,以提高用户操作响应速度 。(响应速度更快) 3.减少系统的瓶颈,提高MySQL数据库整体的性能。 1.用户的反馈(主要) 2.日志分析(主要) 3.服务器资源使用监控 4.数据库内部状况监控 5.对事务 、 锁等待的监控第1步:选择适合的 DBMS第2步:优化表设计第3步:优化逻辑查询第4步原创 2022-07-04 20:59:00 · 244 阅读 · 0 评论 -
MySQL-数据库的设计范式
在关系型数据库中,关于数据表设计的基本原则、规则就称为范式。可以理解为,一张数据表的设计结构需要满足的某种设计标准的级别 。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 目前关系型数据库有六种常见范式,按照范式级别,从低到高分别是:第一范式(1NF)、第二范式 (2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。有两个表: 球员表(player) :球员编号 | 姓名 | 身份证号 | 年龄 | 球队编号原创 2022-07-04 20:32:22 · 642 阅读 · 0 评论 -
MySQL-索引优化/查询优化
对于多列索引,过滤条件想使用索引就必须按照索引建立时的顺序依次满足,一旦跳过某个字段,索引后面的字段都无法使用。 假如索引中定义的是id,name,age,那查询时条件必须严格按照 id,name,age 的顺序。 对于添加了索引的字段,最好不要包括在函数内,或有其他计算、转换行为。由于name字段是范围条件,所以它后面的字段都失效了。我们开发时要把条件字段放在最后。1.5 like以通配符%开头导致索引失效1.6 OR 前后存在非索引的列,索引失效原创 2022-07-04 16:09:21 · 898 阅读 · 0 评论 -
MySQL-性能分析概述
整个流程划分成了 观察(Show status) 和 行动(Action) 两个部分。字母 S 的部分代表观察(会使 用相应的分析工具),字母 A 代表的部分是行动(对应分析可以采取的行动)。 在MySQL中,可以使用 SHOW STATUS 语句查询一些MySQL数据库服务器的 性能参数 、 执行频率 。三、统计SQL的查询成本四. 定位执行慢的 SQL:慢查询日志五、查看SQL执行成本-SHOW PROFILE六、分析查询语句-EXPLAIN原创 2022-07-03 16:56:25 · 333 阅读 · 0 评论 -
MySQL-索引的创建、删除与设计(CREATE INDEX/DROP INDEX)
MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。 按照 物理实现方式 ,索引可以分为 2 种:聚簇索引和非聚簇索引。 按照 作用字段个数 进行划分,分成单列索引和联合索引。 1.普通索引:可以创建在任何数据类型中。例如student表的name字段。 2.唯一性索引:限制该索引的值必须原创 2022-07-03 15:34:55 · 963 阅读 · 0 评论 -
MySQL-InnoDB的数据存储结构
InnoDB将数据划分为若干页,每个页默认大小16KB。 页是磁盘和内存交互的基本单位,每次IO最少读取16KB的内容到内存。也就是说,IO的基本单位是页。一个页中可以存储多个行记录。 页之间可以不在物理结构上相连,通过双向链表相关联。页内的记录按主键大小排序构成单向链表。 行->页->区->段->表空间 区在文件系统中是连续分配的空间,一个区等于64个页,大小:64*16K=1MB 段中不要求区之间是相邻的,不同类型的数据库对象以不原创 2022-07-03 11:06:14 · 1053 阅读 · 0 评论 -
MySQL数据结构选择的合理性(Hash/二叉搜索树/AVL树/B树/B+树)
Hash本身是一个散列函数,可以帮助我们提升数据检索的效率。 Hash算法是通过某种确定的算法,将输入转变为输出。相同的输入一定得到相同的输出。 假设我们要验证两个文件是否相同,只需要对比它们用hash函数计算的结果。 采用Hash进行检索的效率很高,只需检索一次就能找到数据,而B+树需要从上往下查找。单从效率上说,Hash比B+树快。效率O(1). 在采取hash的存储方式中,我们通过Hash函数计算每个记录的哈希值,把它们映射到Hash表的不同位置原创 2022-07-03 09:25:03 · 252 阅读 · 0 评论 -
MySQL-索引的数据结构(InnoDB引擎为例)
索引(Index)是帮助MySQL高效获取数据的数据结构。 (1)类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本 ,这也是创建索引最主要的原因。 (2)通过创建唯一索引,可以保证数据库表中每一行数据的唯一性 。 (3)在实现数据的参考完整性方面,可以 加速表和表之间的连接 。换句话说,对于有依赖关系的子表和父表联合查询时, 可以提高查询速度。 (4)在使用分组和排序子句进行数据查询时,可以显著减少查询中分组和排序的原创 2022-07-02 22:25:22 · 548 阅读 · 0 评论 -
MySQL-逻辑架构/执行流程/缓冲池/存储引擎
SQL查询的简要流程: 具体架构: 1、客户端访问MySQL服务器要先建立TCP连接。 2、TCP 连接收到请求后,必须要分配给一个线程专门与这个客户端的交互。所以还会有个线程池,去走后面的流程。每一个连接从线程池中获取线程,省去了创建和销毁线程的开销。 3、MySQL 服务器对 TCP 传输过来的账号密码做身份认证、权限获取。 接收用户的SQL命令,并且返回用户需要查询的结果。MySQL支持多种SQL语言接口。 在解析器原创 2022-07-02 18:02:46 · 174 阅读 · 0 评论 -
MySQL-触发器(CREATE TRIGGER FOR EACH ROW)
在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息 和 库存信息 分 别存放在 2 个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性,必须同时 在库存表中添加一条库存记录。 这样一来,我们就必须把这两个关联的操作步骤写到程序里面,而且要用 事务 包裹起来,确保这两个操 作成为一个 原子操作 ,要么全部执行,要么全部不执行。要是遇到特殊情况,可能还需要对数据进行手 动维护,这样就很 容易忘记其中的一步 ,导致数据缺失。 这个时原创 2022-07-02 14:51:48 · 831 阅读 · 0 评论 -
MySQL-流程控制结构/游标(IF THEN/CASE THEN/LOOP/WHILE DO/REPEAT UNTIL/ITERATE/LEAVE/OPEN/FEATCH/CLOSE)
流程控制为三大类: 顺序结构 :程序从上往下依次执行 分支结构 :程序按条件进行选择执行,从两条或多条路径中选择一条执行 循环结构 :程序满足一定条件下,重复执行一组语句 针对于MySQL 的流程控制语句主要有 3 类。注意:只能用于存储程序。 条件判断语句 :IF 语句和 CASE 语句 循环语句 :LOOP、WHILE 和 REPEAT 语句原创 2022-07-02 11:08:44 · 960 阅读 · 0 评论 -
MySQL-变量/错误处理(GLOBAL/SESSION/SET/DECLARE CONDITION FOR/DECALRE HANDLER FOR)
在 MySQL 数据库中,变量分为 系统变量 以及 用户自定义变量。 变量由系统定义,不是用户定义,属于 服务器 层面。启动MySQL服务,生成MySQL服务实例期间, MySQL将为MySQL服务器内存中的系统变量赋值,这些系统变量定义了当前MySQL服务实例的属性、特征。这些系统变量的值要么是编译MySQL时参数的默认值,要么是配置文件 (例如my.ini等)中的参数值。 系统变量分为全局系统变量(需要添加 global 关键字)以及会话系统变量(需要添加 session 关原创 2022-07-02 10:32:11 · 614 阅读 · 0 评论 -
MySQL-存储过程与函数(PRECEDURE/FUNCTION/DECLARE/SET/CALL/DELIMITER)
存储过程就是一组经过预先编译的SQL 语句的封装。 执行过程:存储过程预先存储在 MySQL 服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列 SQL 语句全部执行。 优点: 1、简化操作,提高了sql语句的重用性,减少了开发程序员的压力 2、减少操作过程中的失误,提高效率 3、减少网络传输量(客户端不需要把所有的 SQL 语句通过原创 2022-07-02 09:03:18 · 615 阅读 · 0 评论 -
MySQL-视图(CREATE VIEW/ALTER VIEW)
视图是一种 虚拟表 ,本身是 不具有数据 的,占用很少的内存空间,它是 SQL 中的一个重要概念。 视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。 视图的创建和删除只影响视图本身,不影响对应的基表。但是当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化,反之亦然。 向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句 视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对原创 2022-07-01 18:11:48 · 1520 阅读 · 0 评论 -
MySQL-约束(NOT NULL/UNIQUE /PRIMARY KEY /FOREIGN KEY/CHECK /DEFAULT )
数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是防止数据库中 存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。 为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。 约束是表级的强制规定。 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后通过 ALTER TABLE 语句规定 约束。 约束的分类原创 2022-07-01 17:11:20 · 1082 阅读 · 0 评论 -
MySQL-数据类型(整数/浮点/定点/位/时间日期/文本字符串/枚举/集合/二进制字符串/JSON/空间)
MySQL中有如下数据类型: 常见数据类型的属性: 整数类型一共有 5 种,包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT。 注:整数可以设置显示宽度,例如 INT(10),但其与类型可以存储值的范围无关 。从MySQL 8.0.17开始,整数数据类型不推荐使用显示宽度属性。 整型数据类型可以在定义表结构时指定所需要的显示宽度,如果不指定,则系统为每一种类型指定默认的宽度值。 UNSIGNED : 无符号类型原创 2022-07-01 15:45:36 · 459 阅读 · 0 评论 -
MySQL-增删改(INSERT/VALUES/UPDATE/SET/DELETE)
使用INSERT完成插入操作,格式与举例:1.2 插入查询结果 INSERT还可以将SELECT语句查询的结果插入到表中,此时不需要把每一条记录的值一个一个输入,只需要使用一条INSERT语句和一条SELECT语句组成的组合语句即可快速地从一个或多个表中向一个表中插入多行。格式与示例:二、更新数据 使用UPDATE更新数据,可以一次更新多条数据。 如果需要回滚数据,需要保证在DML前,进行设置:SET AUTOCOMMIT = FALSE; 使用 WHERE ...原创 2022-07-01 14:38:05 · 1321 阅读 · 0 评论 -
MySQL-数据库表的创建/管理(CREATE/ALTER/DROP/AS/CHANGE/ADD/MODIFY/TRUNCATE/DELETE)
数据库名、表名不得超过30个字符,变量名限制为29个 必须只能包含 A–Z, a–z, 0–9, _共63个字符数据库名、表名、字段名等对象名中间不要包含空格同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名必须保证你的字段没有和保留字、数据库系统或常用方法冲突。............原创 2022-07-01 11:21:38 · 1399 阅读 · 0 评论 -
MySQL-子查询(IN/ANY/ALL/EXIST/NOT EXIST)
子查询指一个查询语句嵌套在另一个查询语句内部的查询。SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。...原创 2022-07-01 10:48:38 · 821 阅读 · 0 评论 -
MySQL-分组查询/聚合函数( GROUP BY/WITH ROLLUP/HAVING)& SELECT原理
可以使用GROUP BY子句将表中的数据分成若干组: 格式; 上面示例的代码: 使用 WITH ROLLUP 关键字之后,在所有查询出的分组记录之后增加一条记录,该记录计算的是不分组时查询出的所有记录的结果。 注意: 当使用ROLLUP时,不能同时使用ORDER BY子句进行结果排序,即ROLLUP和ORDER BY是互斥的。 过滤分组:HAVING子句,给分组后的数据增加额外的条件。原创 2022-06-30 22:08:14 · 2614 阅读 · 0 评论 -
MySQL-内置函数
MySQL提供的内置函数从实现的功能角度可以分为数值函数、字符串函数、日期和时间函数、流程控制函数、加密与解密函数、获取MySQL信息函数、聚合函数等。这里将这些内置函数再分为两类: 单行函数 、 聚合函数(或分组函数)。 单行函数的特点: 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以嵌套原创 2022-06-30 21:05:32 · 750 阅读 · 0 评论 -
MySQL-多表查询(关联查询 JOIN ON/UNION ALL)
笛卡尔乘积是一个数学运算。假设我有两个集合 X 和 Y,那么 X 和 Y 的笛卡尔积就是 X 和 Y 的所有可能组合,也就是第一个对象来自于 X,第二个对象来自于 Y 的所有可能。组合的个数即为两个集合中元素个数的乘积数。 SQL92中,笛卡尔积也称为 交叉连接 ,英文是 CROSS JOIN 。在 SQL99 中也是使用 CROSS JOIN表示交叉连接。它的作用就是可以把任意表进行连接,即使这两张表不相关。 笛卡尔积的错误会在下面条件下产生: 省略多个表的连接条原创 2022-06-30 20:32:32 · 1274 阅读 · 0 评论 -
MySQL-排序与分页查询(ORDER BY/ASC/DESC/LIMIT)
格式: 使用 ORDER BY 子句排序 ASC(ascend):升序 DESC(descend)降序 ORDER BY 子句在SELECT语句的结尾 MySQL中使用 LIMIT 实现分页 格式: 第一个“位置偏移量”参数指示MySQL从哪一行开始显示,是一个可选参数,如果不指定“位置偏移 量”,将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二原创 2022-06-30 19:24:17 · 688 阅读 · 0 评论 -
MySQL-基本概念与查询操作(DESC/SELECT/FROM/WHERE/LIKE)
SQL语言在功能上主要分为如下3大类: DDL(Data Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。 主要的语句关键字包括 CREATE 、 DROP 、 ALTER 等。 DML(Data Manipulation Language、数据操作语言),用于添加、删除、更新和查询数据库记录,并检查数据完整性。 主要的语句关键字包括 INSERT 、 DELETE原创 2022-06-30 17:31:04 · 944 阅读 · 0 评论