数据库
文章平均质量分 74
安正勋
点点滴滴,皆是学问,看到了、学会了、记住了,便是收获、便是进步。
展开
-
详述 MySQL 中 InnoDB 的索引结构以及使用 B+ 树实现索引的原因
文章目录表空间在 MySQL 的众多存储引擎中,InnoDB 是最常用的存储引擎,也是 MySQL 现阶段唯一免费支持事务机制的存储引擎。在本文中,我们以 InnoDB 为例,介绍 MySQL 的索引结构以及其使用 B+ 树实现索引的原因。表空间首先,来了解一下 MySQL 的表空间。中的所有数据被存储在一个空间内,称之为表空间,表空间内部又可以分为段(segment)、区(extent)、页(page)、行(row),逻辑结构如下图:参考资料:MySQL存储引擎MyISAM和InnoDB底原创 2020-05-22 08:04:11 · 4102 阅读 · 0 评论 -
深入理解 MySQL 事务:隔离级别、ACID 特性及其实现原理
什么是事务?事务(`Transaction`),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元。事务通常由高级数据库操作语言或编程语言(如 SQL,C++ 或 Java)书写的用户程序的执行所引起,并用形如`begin transaction`和`end transaction`语句(或函数调用)来界定。事务由事务开始(`begin transaction`)和事务结束(`end transaction`)之间执行的全部操作组成。原创 2020-05-10 21:31:48 · 134317 阅读 · 22 评论 -
史上最简单的 MySQL 教程(三十八)「事务(上)」
温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。 案例:银行的数据库里面存储着用户的账户信息表,当用户 A 想用户 B 转账的时候,正常情况下,A 账户的余额减少,B 账户的余额增加;但是由于某种原因(例如突然断电),当 A 账户的余额减少之后,B 账户的余额并没有增加,这就造成了数据库数据的安全隐患。...原创 2017-10-21 19:54:02 · 9841 阅读 · 14 评论 -
史上最简单的 MySQL 教程(三十)「联合查询」
温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。联合查询联合查询:union,将多次查询(多条select语句)的结果,在字段数相同的情况下,在记录的层次上进行拼接。基本语法联合查询由多条select语句构成,每条select语句获取的字段数相同,但与字段类型无关。基本语法:sel...原创 2017-08-26 21:41:19 · 6407 阅读 · 16 评论 -
史上最简单的 MySQL 教程(三十一)「子查询(上)」
子查询子查询:sub query,查询是在某个查询结果之上进行的,一条select语句内部包含了另外一条select语句。分类子查询有两种分类方式,分别为:按位置分类和按结果分类。按位置分类,即根据子查询(select语句)在外部查询(select语句)中出现的位置进行分类,分别为:from子查询:子查询出现在from之后;where子查询:子查询出现在where条件之中;exists子查询:原创 2017-08-26 22:14:53 · 6675 阅读 · 13 评论 -
史上最简单的 MySQL 教程(三十二)「子查询(下)」
子查询子查询:sub query,查询是在某个查询结果之上进行的,一条select语句内部包含了另外一条select语句。行子查询行子查询,返回的结果可以使一行多列或者多行多列。需求:查询学生表中,年龄最大且身高最高的学生。思路:先确定数据源,学生表。 select * from student where age = ? and height = ?;然后确定最大年龄和最大身高。 sele原创 2017-08-27 11:00:54 · 4350 阅读 · 14 评论 -
史上最简单的 MySQL 教程(三十三)「视图(上)」
视图视图:view,是一种有结构(有行有列),但没有结果(结构中不真实存放数据)的虚拟表,虚拟表的结构来源不是自己定义的,而是从对应的基表(视图的数据来源)中产生的。创建视图首先,给出创建视图的基本语法,基本语法:create view + 视图名 + as + select语句;其中,select语句可以是普通查询,也可以是连接查询、联合查询、子查询等。此外,视图根据数据的来源,可以分为单表视原创 2017-09-03 17:43:28 · 7300 阅读 · 6 评论 -
史上最简单的 MySQL 教程(三十四)「视图(下)」
视图操作视图操作:视图是可以进行数据写操作的,只不过有很多限制。原创 2017-09-09 12:52:26 · 4701 阅读 · 6 评论 -
史上最简单的 MySQL 教程(二十九)「外键(下)」
外键外键:foreign key,外面的键,即不在自己表中的键。如果一张表中有一个非主键的字段指向另外一张表的主键,那么将该字段称之为外键。每张表中,可以有多个外键。外键作用首先,给出父表和子表的定义:父表,指外键所指向的表;子表,指相对于父表,拥有外键的表。外键默认的作用有两个,分别对子表和父表进行约束。第 1 种:约束子表在子表进行数据的写操作的时候,如果对应的外键字段在父表找不到对应的匹原创 2017-08-20 10:55:14 · 5301 阅读 · 8 评论 -
史上最简单的 MySQL 教程(二十八)「外键(上)」
外键外键:foreign key,外面的键,即不在自己表中的键。如果一张表中有一个非主键的字段指向另外一张表的主键,那么将该字段称之为外键。每张表中,可以有多个外键。新增外键外键既可以在创建表的时候增加,也可以在创建表之后增加(但是要考虑数据的问题)。第 1 种:在创建表的时候,增加外键基本语法:foreign key(外键字段) + references + 外部表名(主键字段);执行如下 S原创 2017-08-19 23:02:53 · 14493 阅读 · 5 评论 -
史上最简单的 MySQL 教程(二十七)「连接查询(下)」
连接查询连接查询:将多张表(大于等于 2 张表)按照某个指定的条件进行数据的拼接,其最终结果记录数可能有变化,但字段数一定会增加。连接查询的意义:在用户查询数据的时候,需要显示的数据来自多张表。连接查询为join,使用方式为:左表join右表。左表:join左边的表;右表:join右边的表。连接查询分类:在 SQL 中将连接查询分为四类,分别为内连接、外链接、自然连接和交叉连接。原创 2017-07-14 23:43:10 · 5555 阅读 · 8 评论 -
史上最简单的 MySQL 教程(二十六)「连接查询(上)」
连接查询连接查询:将多张表(大于等于 2 张表)按照某个指定的条件进行数据的拼接,其最终结果记录数可能有变化,但字段数一定会增加。连接查询的意义:在用户查询数据的时候,需要显示的数据来自多张表。连接查询为join,使用方式为:左表join右表。左表:join左边的表;右表:join右边的表。连接查询分类:在 SQL 中将连接查询分为四类,分别为内连接、外链接、自然连接和交叉连接。原创 2017-07-11 21:15:40 · 7038 阅读 · 14 评论 -
史上最简单的 MySQL 教程(二十五)「数据的高级操作 之 查询(下)」
温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。数据的高级操作查询数据(下)having子句having字句:与where子句一样,都是进行条件判断的,但是where是针对磁盘数据进行判断,数据进入内存之后,会进行分组操作,分组结果就需要having来处理。思考可知,having能做...原创 2017-07-11 08:27:36 · 6233 阅读 · 4 评论 -
史上最简单的 MySQL 教程(二十四)「数据的高级操作 之 查询(中)」
数据的高级操作查询数据(上)基本语法: select + 字段列表/* + from + 表名 + [where 条件];完整语法: select + [select 选项] + 字段列表[字段别名]/* + from + 数据源 + [where 条件] + [1] + [2] + [3]; [1] = [group by 子句][2] = [order by 子句][3] = [lim原创 2017-06-27 19:56:00 · 7946 阅读 · 7 评论 -
史上最简单的 MySQL 教程(二十三)「数据的高级操作 之 查询(上)」
数据的高级操作查询数据(上)基本语法: select + 字段列表/* + from + 表名 + [where 条件];完整语法: select + [select 选项] + 字段列表/* + from + 数据源 + [where 条件] + [group by 子句] + [having 子句] + [order by 子句] + [limit 子句];执行如下 SQL 语句,进行测原创 2017-06-25 19:09:59 · 12921 阅读 · 5 评论 -
史上最简单的 MySQL 教程(二十二)「数据的高级操作 之 更新 & 删除」
数据的高级操作更新数据基本语法: update + 表名 + set + 字段 = 值 + [where 条件];高级语法: update + 表名 + set + 字段 = 值 + [where 条件] + [limit 更新数量];执行如下 SQL 语句,进行测试:-- 将表 my_copy 中的部分 a 更新为 cupdate my_copy set name = 'c' where原创 2017-06-25 18:34:04 · 6235 阅读 · 4 评论 -
史上最简单的 MySQL 教程(三十五)「数据备份与还原(上)」
数据备份与还原基础概念:备份,将当前已有的数据或记录另存一份;还原,将数据恢复到备份时的状态。为什么要进行数据的备份与还原?防止数据丢失;保护数据记录。数据备份与还原的方式有很多种,具体可以分为:数据表备份、单表数据备份、SQL备份和增量备份。数据表备份数据表备份,不需要通过 SQL 来备份,我们可以直接进入到数据库文件夹复制对应的表结构以及数据;在需要还原数据的时候,直接将备份(复制)原创 2017-10-01 11:23:51 · 4829 阅读 · 4 评论 -
史上最简单的 MySQL 教程(三十六)「数据备份与还原(中)」
温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。数据备份与还原基础概念:备份,将当前已有的数据或记录另存一份;还原,将数据恢复到备份时的状态。为什么要进行数据的备份与还原?防止数据丢失;保护数据记录。数据备份与还原的方式有很多种,具体可以分为:数据表备份、单表数据备份、S...原创 2017-10-01 16:26:49 · 4387 阅读 · 8 评论 -
史上最简单的 MySQL 教程(三十七)「数据备份与还原(下)」
数据备份与还原基础概念:备份,将当前已有的数据或记录另存一份;还原,将数据恢复到备份时的状态。为什么要进行数据的备份与还原?防止数据丢失;保护数据记录。数据备份与还原的方式有很多种,具体可以分为:数据表备份、单表数据备份、SQL备份和增量备份。SQL 备份SQL 备份,备份的是 SQL 语句。在进行 SQL 备份的时候,系统会对表结构以及数据进行处理,变成相应的 SQL 语句,然后执行备原创 2017-10-02 11:42:42 · 4702 阅读 · 10 评论 -
出现 DB2 SQL Error: SQLCODE = -1773, SQLSTATE = null 错误的原因及解决方法
1 错误描述在通过「DbVisualizer」执行 SQL 语句插入数据的时候,报出如下错误:2 错误原因通过观察上述标记出来的错误描述:DB2 SQL Error: SQLCODE = -798, SQLSTATE = 428C9, SQLERRMC = ID然后,查询「史上最全的 DB2 错误代码大全」可知,此错误的原因为:-798 428C9 不能把一个值插入到用 GEN...原创 2018-12-24 22:33:43 · 8182 阅读 · 2 评论 -
史上最简单的 MySQL 教程(四十四)「存储过程」
温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。存储过程存储过程简称过程,procedure,是一种用来处理数据(增删改)的方式。简单点,我们也可以将其理解为没有返回值的函数。创建过程-- 基本语法create procedure 过程名([参数列表])begin -- 过程...原创 2018-02-28 08:47:23 · 6211 阅读 · 25 评论 -
史上最简单的 MySQL 教程(四十三)「函数」
温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。函数函数,就是将一段代码封装到一个结构中,在需要执行该段代码的时候,直接调用该结构(函数)执行即可。此操作,实现了代码的复用。在 MySQL 中,函数有两种,分别为:系统函数和自定义函数。系统函数顾名思义,系统函数就是系统定义好的函数,在需要的...原创 2018-02-28 08:46:47 · 3958 阅读 · 5 评论 -
史上最简单的 MySQL 教程(四十二)「代码执行结构」
温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。代码执行结构在 MySQL 编程中,代码的执行结构有三种,分别为:顺序结构;分支结构;循环结构。顺序结构,自不必多说,在本文中,我们着重了解分支结构和循环结构。分支结构分支结构:事先准备多个代码块,通过判断条件是否满足,执行对应的原创 2018-01-03 22:06:06 · 7455 阅读 · 13 评论 -
记一次 JVM CPU 使用率飙高问题的排查过程
首先,我们一起看看通过 VisualVM 监控到的机器 CPU 使用率图:![cpu-usage](https://img-blog.csdnimg.cn/202004071615390.png)如上图所示,在 **下午3:45** 分之前,CPU 的使用率明显飙高,最高飙到近 100%,为什么会出现这样的现象呢?原创 2020-04-07 23:48:52 · 62440 阅读 · 39 评论 -
详述 MySQL 导出数据遇到 secure-file-priv 的问题
ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execute this statement.对于上述错误,相信对于第一次执行 MySQL 数据导出操作的同学大都会遇见。至于为什么会遇到这个错误,原因很简单,那就是:我们不知道 MySQL 默认的导出目录是哪原创 2017-10-01 19:42:10 · 31449 阅读 · 6 评论 -
详述查看 MySQL 数据文件存储位置的方法
我们可能会有一个疑惑,那就是:当我们在本地(自己的电脑)安装完 MySQL 之后,也创建了很多的数据库啊、表啊,也存储了很多的数据啊,但是这些内容都存储到哪里了呢?特别是,当我们需要直接操作这些数据文件的时候,翻遍了整个电脑,却找不到 MySQL 的数据文件到底在哪里,这就有些坑爹啦!在这里,教给大家一个非常简单的能够立即定位到 MySQL 数据文件的存储位置方法,即在 MySQL 客户端键入如下命原创 2017-10-01 13:37:26 · 22403 阅读 · 9 评论 -
详述 MySQL 数据库输入密码后闪退的问题及解决方案
1 案例说明最近一直在用 MySQL 数据库演示基础功能,但是这两天忽然出现了一个问题,那就是:在启动 MySQL 服务端并输入密码后,出现闪退现象。之后,在网上搜了搜,发现出现这种问题很常见,大多数原因可能是在咱们使用安全软件的时候,无意中关闭了 MySQL 服务。此外,如果 MySQL 服务已经启动了,但还是出现了闪退的现象,那就可能是 MySQL 的配置出现了问题。2 解决方案在出现上述问题的原创 2017-05-23 10:00:40 · 81807 阅读 · 24 评论 -
详述 MySQL 数据库的安装及配置
最近在写「史上最简单的 Database 教程」系列博文,写着写着,忽然想到或许有些童鞋还没有接触过 MySQL 数据库呢?理论与实践相结合才是王道啊,因此有了这篇关于 MySQL 数据库的安装及配置介绍的博文。说实话,这篇博文并没有什么技术含量,姑且给未接触过 MySQL 数据库的童鞋一些参考吧!原创 2017-05-02 23:08:21 · 20038 阅读 · 28 评论 -
史上最简单的 MySQL 教程(四十)「数据库变量」
变量在 MySQL 数据库中,变量有两种,分别为:系统变量和自定义变量。根据变量的作用范围,又分为:会话级别变量和全局级别变量。系统变量系统变量,顾名思义,是系统设置好的变量(皆为全局级别变量),也是用来控制服务器表现的,例如autocommit、auto_increment_increment等。大多数的时候,我们并不需要使用系统变量,但我们仍然需要了解有这么回事,在必须要的时候,它可以帮助我们完原创 2017-12-03 19:43:24 · 7297 阅读 · 14 评论 -
史上最简单的 MySQL 教程(三十九)「事务(下)」
温馨提示:在「事务(上)」中,我们已经了解了如何在 MySQL 中开启事务,以及事务的一些基本操作。在本文中,我们将进一步学习事务的知识,包括事务原理、自动事务、回滚点和特性等。事务原理事务原理:在事务开启之后,所有的操作都会被临时存储到事务日志,事务日志只有在收到commit命令之后,才会将操作同步到数据表,其他任何情况都会清空事务日志,例如突然断开连接、收到rollback命令等。接下来,我们原创 2017-11-18 11:21:44 · 8576 阅读 · 9 评论 -
史上最简单的 MySQL 教程(二十一)「数据的高级操作 之 蠕虫复制」
数据的高级操作蠕虫复制蠕虫复制:从已有的数据表中获取数据,然后将数据进行新增操作,数据成倍(以指数形式)的增加。根据已有表创建新表,即复制表结构,其基本语法为:create table + 表名 + like + [数据库名.]表名;执行如上 SQL 语句,进行测试:-- 根据已有表,创建新表,当两张表位于同一数据库时,可以省略数据库名称create table my_copy like my原创 2017-06-03 21:14:44 · 8607 阅读 · 5 评论 -
史上最简单的 MySQL 教程(二十)「数据的高级操作 之 主键冲突」
数据的高级操作数据的操作,无外乎增删改查。新增数据的基本语法为:insert into + 表名 + [(字段列表)] + values (值列表);在数据插入的时候,假设主键对应的值已经存在,则插入失败!这就是主键冲突。主键冲突当主键存在冲突(duplicate key)的时候,可以选择性的进行处理,即更新或替换。下面,以表my_class为例,进行测试:其中,grade为主键。第一种情况:主原创 2017-06-03 20:38:07 · 5599 阅读 · 4 评论 -
史上最简单的 MySQL 教程(十九)「范式」
温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。范式范式:Normal Farmat,是为了解决数据的存储和优化问题。在数据存储之后,凡是能够通过关系寻找出来的数据,坚决不再重复存储,范式的终极目标是减少数据冗余。范式是一种分层结构的规范,共 6 层,分别为1NF、2NF、3NF、4NF、5...原创 2017-05-24 16:29:34 · 5538 阅读 · 11 评论 -
史上最全的 DB2 错误代码大全
1 前言作为一个程序员,数据库是我们必须掌握的知识,经常操作数据库不可避免,but,在写 SQL 语句的时候,难免遇到各种问题。例如,当咱们看着数据库报出的一大堆错误代码时,是否有种两眼发蒙的感觉呢?咳咳,莫要否认,你有、我有,全都有啊!不过,值得庆幸的是,已经有人帮咱们整理出一份关于 DB2 的错误代码大全啦,以后再遇到数据库报错,直接拎出看看,岂不爽哉?当然,在此对原作者送上万分的感谢。2 错误原创 2017-02-24 21:16:58 · 106129 阅读 · 5 评论 -
详述 DB2 分页查询及 Java 实现
在整改数据库敏感信息加密时,需要对已存数据进行处理,如果直接用 select * from tableName 很容易出现问题,因此选择分页查询,批量处理数据。原创 2017-09-10 14:55:00 · 9939 阅读 · 0 评论 -
关于 MySQL 慢日志,你想知道的都在这
作者介绍:邹鹏,现任职于腾讯云数据库团队,负责腾讯云数据库MySQL中间件研发,多年的数据库、网络安全研发经验,对云计算平台的网络、计算、存储、安全有着深入的了解,在MySQL的高可用、高可靠、中间件方面有丰富的经验。正文一、什么是慢日志?MySQL 的慢查询日志是 MySQL 提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过long_query_time转载 2017-07-20 09:38:24 · 7164 阅读 · 1 评论 -
常用的分布式事务解决方案
众所周知,数据库能实现本地事务,也就是在同一个数据库中,你可以允许一组操作要么全都正确执行,要么全都不执行。这里特别强调了本地事务,也就是目前的数据库只能支持同一个数据库中的事务。但现在的系统往往采用微服务架构,业务系统拥有独立的数据库,因此就出现了跨多个数据库的事务需求,这种事务即为“分布式事务”。那么在目前数据库不支持跨库事务的情况下,我们应该如何实现分布式事务呢?本文首先会为大家梳理分布式事务的基本概念和理论基础,然后介绍几种目前常用的分布式事务解决方案。废话不多说,那就开始吧~转载 2020-05-07 15:40:16 · 14419 阅读 · 14 评论 -
详述 IntelliJ IDEA 遇到 Maven 项目打开(Open)或者导入(Import)失败的解决方法
详述 IntelliJ IDEA 遇到 Maven 项目打开(Open)或者导入(Import)失败的解决方法原创 2020-03-18 20:10:35 · 16921 阅读 · 0 评论 -
10 种常见的 MySQL 高可用方案选型解读
作者介绍:王松磊,现任职于 UCloud,从事 MySQL 数据库内核研发工作,主要负责 UCloud 云数据库 udb 的内核故障排查工作以及数据库新特性的研发工作。1 概述我们在考虑 MySQL 数据库的高可用架构时,主要考虑如下几方面:如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。用作备份、只读副本等功能的非主转载 2017-04-22 21:00:37 · 1572 阅读 · 0 评论 -
彻底理解数据库事务
在计算机术语中,事务(Transaction)是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit),通常就是指数据库事务。概念一个数据库事务通常包含对数据库进行读或写的一个操作序列。它的存在有以下两个目的:为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法;当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法转载 2017-04-06 18:07:40 · 2095 阅读 · 0 评论