
MySQL
文章平均质量分 85
MySQL分享与见解
WorkLee
10+年Java开发老兵,如你需要帮忙敬请找我,我很乐意帮你。
需要帮忙请私信联系我。
专注Java,Spring,Spring Boot,微服务,数据库等技术分享。
专注成为一名架构师,分享架构师干货,汇集各类奇妙好玩的架构师话题和流行的架构师动向。
展开
-
MySQL分析与整理 — 日志
文章中所有操作均是在 MySQL 5.7 版本下进行的无论是哪种数据库,一定会有日志文件。在 MySQL 中主要有 5 种日志文件:错误日志,记录 MySQL 服务的启停时正确和错误的信息,还记录启动、停止、运行过程中的错误信息。查询日志,记录建立的客户端连接和执行的语句。二进制日志,记录所有更改数据的语句,可用于数据复制。慢查询日志,记录所有执行时间超过 long_query_time 的所有查询或不使用索引的查询。中继日志,主从复制时使用的日志。官网也有相应的关于日志的介绍:ht..原创 2020-08-10 01:28:35 · 218 阅读 · 0 评论 -
MySQL分析与整理 — 备份与恢复
文章中所有操作均是在 MySQL 5.7 版本下进行的备份对于数据库而言是至关重要的。当数据文件发生损坏、MySQL 服务出现错误、系统内核崩溃、计算机硬件损坏或者数据被误删等事件时,使用一种有效的数据备份方案,就可以快速解决以上所有的问题。MySQL 按不同类别的区分,分为以下几类备份:物理备份 和 逻辑备份物理备份,备份的是完整的数据库目录和数据文件。采用该模式会进行大量的 IO 操作,但不含任何逻辑转换,因此备份和恢复速度通常都比较快。逻辑备份,是通过数据库结构和内容信息来进行备份。因..原创 2020-07-19 14:29:36 · 1541 阅读 · 0 评论 -
MySQL分析与整理 — 事件
文章中所有操作均是在 MySQL 5.7 版本下进行的事件是用来执行定时任务的一组 SQL 语句集,在时间到时会触发。一个事件可调用一次,也可周期性的启动,由一个特定的事件调度器线程来管理的,MySQL 的事件调度器可以精确到每秒钟执行一个任务。事件的优点就是对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。还能实现每秒钟执行一个任务,在一些对实时性要求较高的环境下非常实用。当然事件也是有缺点的,因为事件是个定时触发的,不能随时调用。1 使用事件1.1 开启事件调度器MySQ..原创 2020-07-17 00:14:08 · 278 阅读 · 0 评论 -
MySQL分析与整理 — 游标
文章中所有操作均是在 MySQL 5.7 版本下进行的到了 MySQL 高级阶段,不得不说下游标了,因为在高级的应用中,比如存储过程中,游标是经常涉及到问题。游标的设计是一种数据缓冲区的思想,用来存放 SQL 语句执行的结果。游标是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。尽管游标能遍历结果中的所有行,但一次只指向一行。游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。1 游标的几个操作游标不像函数,触发器,存储过程似的,创建是用 create 关键字,它更..原创 2020-07-16 20:24:26 · 289 阅读 · 0 评论 -
MySQL分析与整理 — 存储过程
文章中所有操作均是在 MySQL 5.7 版本下进行的存储过程是具有特定功能的多个 SQL 语句集组成的,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的 SQL 语句,并且可以随时对存储过程进行修改..原创 2020-07-16 17:41:56 · 292 阅读 · 0 评论 -
MySQL分析与整理 — 自定义函数
文章中所有操作均是在 MySQL 5.7 版本下进行的MySQL 数据库除了自带的内置函数之外,如果这些内置函数并不是满足我们的需求,可以自定义函数,其用法和内置函数相同。自定义函数是有要求的,它有两个必要的要求:参数(可以没有参数)和返回值(必须有返回值,可以返回任何数据类型的值)。1 自定义函数使用1.1 创建自定义函数-- 创建语法delimiter $create function function_name(parameter_name type,[parameter_name2..原创 2020-07-16 01:03:29 · 711 阅读 · 0 评论 -
MySQL分析与整理 — 流程控制与变量
文章中所有操作均是在 MySQL 5.7 版本下进行的把 MySQL 中的流程控制语句单独拿出来说说,是因为在 MySQL 的大部分高级应用中,存储过程和自定义函数等很多地方都能用到,而这些都涉及到流程控制语句,以还有变量的定义等等。1 变量在 MySQL 中大概可以分成四种形式的变量:全局变量,会话变量,用户变量,局部变量1.1 全局变量全局变量影响服务器整体操作。当服务器启动时,会将所有全局变量初始化为默认值。这些默认值可以在配置文件中或在命令行中指定的选项进行更改。要想更改全局变量,必..原创 2020-07-15 23:57:53 · 930 阅读 · 0 评论 -
MySQL分析与整理 — 锁
文章中所有操作均是在 MySQL 5.7 版本下进行的数据库中的锁是指一种软件机制,用来控制防止某个用户(进程会话)在已经占用了某种数据资源时,其他用户做出影响本用户数据操作或导致数据非完整性和非一致性问题发生的手段。所以提及锁,一般是和事务一起说的。按照锁的级别划分:读锁,也叫共享锁。针对同一块数据,多个读操作可以同时进行而不会互相影响。读锁只针对 update 时候加锁,在未对 update 操作提交之前,其他事务只能够获取最新的记录但不能够 update 操作。写锁,也叫排它锁。当前写操.原创 2020-07-14 05:30:58 · 274 阅读 · 0 评论 -
MySQL分析与整理 — 事务
文章中所有操作均是在 MySQL 5.7 版本下进行的讨论 MySQL 数据库的事务,一般情况下都是有讨论基础的。MySQL 的存储引擎中 InnoDB,NDB 是支持事务的,而且 InnoDB 引擎对事务的支持最全面,所以我们在讨论 MySQL 数据库的事务都是基于 InnoDB 存储引擎,包括示例的表也是 InnoDB 的表。1 什么是事务谈到事务了,就得说说事务的基本特性:原子性,一致性,隔离性,持久性。至于它们各有什么含义或者特性自行搜索即可,这里不阐述了,毕竟作者的宗旨是以实用为主,理论.原创 2020-07-13 13:31:58 · 248 阅读 · 0 评论 -
MySQL分析与整理 — 触发器
文章中所有操作均是在 MySQL 5.7 版本下进行的触发器可以理解为和表有关系的特殊的存储过程,可以在 insert,update,delete 表中数据的时候触发执行。它是自动触发执行的,执行了预先编写好的若干条 SQL 语句。这些若干条 SQL 语句是一个事务操作,要么全部执行,要么都不执行。这些若干条 SQL 语句不能使用以显示或隐式方式开始或结束事务的语句,如start trans-action,commit 或 rollback等。触发器的定义有那么几个要素必须要遵循:触发器是定义..原创 2020-07-12 14:21:23 · 404 阅读 · 0 评论 -
MySQL分析与整理 — 索引
文章中所有操作均是在 MySQL 5.7 版本下进行的索引的使用,可以大大提高 MySQL 的查询速度。一般情况下,创建索引时,确保该索引是应用在 SQL 查询语句的条件(一般作为 where 子句的条件)。其实可以粗浅的理解索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引的创建会增加表的存储占用磁盘空间。而且不是索引越多越好,索引可以提交查询速度,同时却会降低表的更新速度(insert,update,delete)。通常情况下,索引是创建在表的字段上的,可以是单个字段,也可以..原创 2020-07-11 21:46:42 · 300 阅读 · 0 评论 -
MySQL分析与整理 — 视图
文章中所有操作均是在 MySQL 5.7 版本下进行的视图是一种虚拟存在的表,可以粗浅理解为一个表或者多个表的数据查询。视图相对于表并不在数据库中实际存在,视图仅是保存了 SQL 逻辑,并且是在使用视图时候才会去执行所谓的 SQL 逻辑。视图是虚拟表,本身不存储数据,而是按照指定的方式进行查询。视图相对表的优势:简单,使用视图的用户完全不需要关系后面对应的表结构、关联条件和筛选条件,对用户来说已经是过滤好的符合条件的结果集。安全,使用视图的用户只能访问他们被允许的结果集,对表的权限管理并不..原创 2020-07-11 19:11:36 · 217 阅读 · 0 评论 -
MySQL数据库的InnoDB引擎TableSpaceExists问题解决
文章中所有操作均是在 MySQL 5.7 版本下进行的引入问题MySQL 使用过程中如果出现如下报错:ERROR 1813 (HY000): Tablespace ‘`库名`.`表名`‘ exists.出现这个问题的大部分原因,在使用 InnoDB 引擎的数据库中,所有已经存在的表都使在使用 InnoDB 引擎的数据库中,所有已经存在的表都使用两个文件保存。假设表名为 test1,则在数据库的数据目录下会有两个文件:test1.frm 文件,存储数据表的定义信息test1.ibd 文件..原创 2020-07-09 00:51:58 · 9233 阅读 · 1 评论 -
MySQL数据库查询默认是按什么进行排序的
文章中所有操作均是在 MySQL 5.7 版本下进行的引入问题MySQL 普通查询它是按照什么进行排序的?我们稍微讨论下这个问题。我们先引入一个测试表:drop table if exists tbl_test;create table tbl_test( id int auto_increment primary key, num varchar(50), info varchar(50));-- 插入测试数据insert into tbl_test val..原创 2020-07-08 23:37:41 · 8654 阅读 · 0 评论 -
MySQL数据库空值和空字符串及NULL的分析
文章中所有操作均是在 MySQL 5.7 版本下进行的区分空字符串和NULL数据库存储数据有必要搞清空值,空字符串和 NULL 的概念。空字符串是单引号引的,它其实是不占空间的。MySQL 中 null 其实是占空间的,官网文档里有说明。它们之前的长度验证:select length('') as '空串', length(null) as 'null', length(' ') as '空格字符串';+--------+------+-----------------+| 空串 ..原创 2020-07-06 23:54:43 · 9519 阅读 · 0 评论 -
MySQL数据库KEY与INDEX区别
文章中所有操作均是在 MySQL 5.7 版本下进行的引入问题在另外一篇文章《自增长AUTO_INCREMENT探讨》曾讨论过,如何给非主键列上增加自增长,在没有特别设置的情况下,默认给一个普通的列设置自增长肯定是不行的。不管是用控制台还是数据库可视化操作工具,给一个普通的列设置自增长肯定是报错的。ERROR 1075: Incorrect table definition; there can be only one auto column and it must be defined as a.原创 2020-07-06 15:53:21 · 3874 阅读 · 1 评论 -
MySQL数据库自增长AUTO_INCREMENT探讨
文章中所有操作均是在 MySQL 5.7 版本下进行的MySQL 的自增列(AUTO_INCREMENT)和其它数据库的自增列对比,有很多特性和不同点(甚至不同存储引擎、不同版本也有一些不同的特性),让人感觉有点稍微复杂。下面我们从一些测试开始,了解一下这方面的特殊知识点。自增列持久化问题自增长在不同的存储引擎下,呈现的问题是不一样的,下面我们举例说明(MySQL 5.7.30 版本中实验)。InnoDB存储引擎的问题/*把之前的测试表删掉,重启服务器,为了更好的展示效果*/-- 创建..原创 2020-07-06 02:36:08 · 3243 阅读 · 0 评论 -
MySQL数据库与建表约束
文章中所有操作均是在 MySQL 5.7 版本下进行的在创建表的时候,一些建表约束是我们经常碰到的问题,这些约束提供了更严谨和完善的建表操作,这些约束都是约束表中的列(字段)上的。建表约束MySQL 建表约束一共有如下几种:非空约束默认约束主键约束唯一约束外键约束自增长约束非空约束(not null)非空约束,用来修饰字段不能为空(not null)。默认情况下,字段是默认可以为空(null),我们可以通过 not null 来约束字段不能为空(not null)。如下示例:..原创 2020-07-05 16:12:07 · 3399 阅读 · 0 评论 -
MySQL5.7.x新增JSON数据类型的解析
文章中所有操作均是在 MySQL 5.7 版本下进行的测试表和测试数据我们先创建示例表然后入几条测试数据:create table tbl_json ( id int(11) not null auto_increment, info json default null, primary key (id)) ENGINE=InnoDB default charset=utf8;insert into tbl_json (info) values ('{"age": 21, ..原创 2020-07-04 11:18:59 · 4526 阅读 · 0 评论 -
MySQL数据库与SQL语言的规范
温馨提醒:文章中所有的操作均是在 MySQL 5.7 版本下进行的。SQL语言结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。结构化查询语言(SQL 语言)是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输.原创 2020-07-03 21:24:52 · 5435 阅读 · 0 评论 -
MySQL数据库与数据库三范式
温馨提醒:文章中所有的操作均是在 MySQL 5.7 版本下进行的。数据库范式第一范式第一范式,就是数据库中的每一列(字段)都是不可分割的基本数据项,每一列(字段)中不能有多个值,每一列(字段)必须是不可拆分的最小单元。这个很好理解,比如我有一个表(如下图)其中有个字段是用来存储地址的,其中存储的数据类似:“山东省济南市历下区解放路街道解放路2020号20楼20室”,其实从数据上看并没有什么不妥,其实这种地址存储形式在一般的项目中都会被拆分的很细,将所谓的地址拆分为:地址1(省份),地址2(市..原创 2020-07-03 19:59:07 · 2687 阅读 · 0 评论 -
MySQL5.7.x版本only_full_group_by解决办法
温馨提醒:文章中所有的操作均是在 MySQL 5.7 版本下进行的。问题展示在把 MySQL 升级到 5.7 或者更高的版本之后,我这里有个测试的表,如下:create table t_emp( id int(11) AUTO_INCREMENT NOT NULL COMMENT '员工id', ename varchar(50) NULL COMMENT '姓名', esal varchar(50) NULL COMMENT '工资', deptid ..原创 2020-07-02 13:01:58 · 402 阅读 · 0 评论 -
MySQL登录密码忘记解决办法
温馨提醒:文章中所有的操作均是在 MySQL 5.7 版本下进行的。如果长期没有使用某个服务器上的 MySQL 数据库,或者是某种原因情况下,可能会出现忘记了 MySQL 数据库的登录密码(这里指的是 root 用户)。遇到这些情况将如何处理和解决。1 Windows下MySQL密码忘记解决第一步找到 MySQL 安装目录下的 my.ini 文件,用文本编辑器打开之后,在最后添加“skip-grant-tables”,保存文件。第二步进入 MySQL 安装目录下的 bin 目录,右键打开 ..原创 2020-07-01 20:17:24 · 838 阅读 · 0 评论 -
MySQL分析与整理 — 数据库的基本操作
温馨提醒:文章中所有的操作均是在 MySQL 5.7 版本下进行的。当安装完了 MySQL 之后就可以进行登录等相关操作了。在这里如何登录就不演示了,非常简单“mysql -u root -p”回车输入密码即可。(一般情况下都是登录 root 管理员用户)温馨提示:退出当前用户用 exit 命令、添加用户执行以下命令可以进行用户添加:create user '用户名'@'IP地址' identified by '密码';比如我创建了有个用户(创建了一个 Lee 用户,默认密码为 1,..原创 2020-07-01 23:02:30 · 286 阅读 · 0 评论 -
MySQL分析与整理 — 常用函数
文章中所有操作均是在 MySQL 5.7 版本下进行的MySQL 数据库中提供了很丰富的内置函数。MySQL 函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数,可以简化用户的操作。这里我们就介绍一下常用内置函数,不太常用的将不做太多介绍。1 数学常用函数-- abs(m),返回m的绝对值select abs(-16); --16-- mod(m,n),返回m被n除的余数,n可以为0返回null,且有警告select mod(11..原创 2020-07-10 00:58:11 · 479 阅读 · 0 评论 -
MySQL分析与整理 — 表的基本操作(表操作和数据类型)
温馨提醒:文章中所有的操作均是在 MySQL 5.7 版本下进行的。当我们创建想要的库之后,通过“use 数据库名;”的命令进入库就可以进行对表的操作了。这里就不提及数据库的操作工具,只针对命令讲解。1 表的操作进入数据库之后,可以通过一下命令展示该库下面所有的表:show tables;温馨提示:可以通过 “ show create table 表名; “ 命令查看指定表的创建信息。通过以下命令查看指定表的表结构:desc 表名;1.1 创建表创建表可以通过下面的命令进行操..原创 2020-07-03 02:19:40 · 348 阅读 · 0 评论 -
MySQL分析与整理 — 表的基本操作(select查询)
文章中所有操作均是在 MySQL 5.7 版本下进行的1 示例表创建及示例数据创建-- 员工表drop table if exists tbl_emp;create table tbl_emp( empno int primary key comment '员工号', ename varchar(50) not null comment '员工姓名', job varchar(50) not null comment '工作职位', mgr int ..原创 2020-07-08 18:31:19 · 371 阅读 · 0 评论 -
MySQL分析与整理 — 表的基本操作(insert,update,delete)
文章中所有操作均是在 MySQL 5.7 版本下进行的1 示例表引入单独的解释语句规则并不是太直观,辅以示例更好理解。-- 引入Oracle中scott用户下的一个表用来示例,尽量保证大部分数据类型都有drop table if exists tbl_emp;create table tbl_emp( empno int primary key comment '员工号', ename varchar(50) not null comment '员工姓名', jo..原创 2020-07-07 19:15:43 · 1237 阅读 · 0 评论 -
MySQL分析与整理 — 安装与调试
温馨提醒:文章中所有的操作均是在 MySQL 5.7 版本下进行的。1 下载MySQL如果您需要安装 MySQL 第一步就要去官网http://www.mysql.com下载相应安装文件。这里我就不给您做官网截图了,毕竟网路上太多这样的安装教程,况且我给您截图了没准哪天官网改变了布局和接入点(网上随便搜一个安装教程里面的官网截图就有可能和现在的官网不同,毕竟社会是进步的)。 MySQL 官网提供了各种系统的安装文件,其中包括各种版本的 Linux 系统,Windows系统等。2 安装MySQL..原创 2020-06-30 20:49:29 · 3323 阅读 · 0 评论 -
MySQL分析与整理 — 文章索引
MySQL分析与整理 — 文章索引原创 2020-06-29 23:12:21 · 4405 阅读 · 1 评论