mysql
文章平均质量分 85
数据库农民工
本博客的作用仅为本人记录自己的学习过程,如有侵权,烦请告知。
展开
-
MySQL分区与分表
一、概念1.分表和分区 的作用?日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。2.什么是分表?分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些子表可以原创 2021-05-17 14:15:56 · 306 阅读 · 0 评论 -
力扣题解-569. 员工薪水中位数
SQL架构Employee 表包含所有员工。Employee 表有三列:员工Id,公司名和薪水。以下为数据:Create table If Not Exists Employee (Id int, Company varchar(255), Salary int)Truncate table Employeeinsert into Employee (Id, Company, Salary) values ('1', 'A', '2341')insert into Employee (Id,原创 2021-04-22 11:04:13 · 508 阅读 · 2 评论 -
MySQL 权限控制详解
All/All Privileges该权限代表全局或者全数据库对象级别的所有权限Alter该权限代表允许修改表结构的权限,但必须要求有create和insert权限配合。如果是rename表名,则要求有alter和drop原表,create和insert新表的权限Alter routine该权限代表允许修改或者删除存储过程、函数的权限Create该权限代表允许创建新的数据库和表的权限Create routine该权限代表允许创建存储过程、函数的权限Create tablespace该原创 2021-04-15 08:34:19 · 472 阅读 · 0 评论 -
MySQL多表连接查询原理
关系型数据库中至关重要的一点就是Join(连接)。接下来说一下连接的原理,首先介绍一下语法。连接简介先创建几张表:CREATE TABLE t1(m1 int, n1 char(1));CREATE TABLE t2(m2 int, n2 char(1));INSERT INTO t1 VALUES(1,‘a’),(2,‘b’),(3,‘c’);INSERT INTO t2 VALUES(2,‘b’),(3,‘c’),(4,‘d’);从本质上来说:连接就是把各个表中的记录取出来按照要求匹配原创 2021-03-31 10:15:52 · 781 阅读 · 0 评论 -
MySQL的单表访问方法探讨
对于我们来说,Mysql我们平时用的最多的就是查询功能,偶尔需要对一些语句做出优化,但是我们如果连查询是怎样执行的都不知道的话,优化也就无从谈起了。Mysql有一个称为优化器的模块,Mysql在对一条查询语句进行语法解析之后,就会将其交给优化器进行优化,优化器的结果就是生产一个所谓的执行计划。我们接下来首先要看一下Mysql是怎样执行单表查询的...原创 2021-03-30 14:07:14 · 124 阅读 · 0 评论 -
mysql的InnoDB的独立表空间介绍
表空间是一个抽象的概念,对于系统表空间来说,对应着文件系统中一个或者多个实际文件,对于每个独立表空间来说,对应着文件系统中一个名为表名**.ibd**的实际文件。1、回忆一些旧知识1.1 页面类型InnoDB是以页为单位管理存储空间的,我们的聚簇索引(也就是完整的页数据)和其他的二级索引都是以B+树的形式保存到表空中的,而B+树的节点也就是数据页,这个数据页的类型名为FIL_PAGE_INDEX。下面表格中则是展示的各种常用的页面类型类型名称描述FIL_PAGE_TYPE_AL原创 2021-03-29 14:24:25 · 239 阅读 · 0 评论 -
MySQL的数据目录介绍
数据库与文件系统的关系我们知道,InnoDB、MyISAM这样的存储引擎都是把表存储在磁盘上,而操错系统又是使用文件系统来管理磁盘,所以像InnoDB、MyISAM这样的存储引擎都是把数据存储在文件系统上,当我们想读取数据段额时候,这些存储引擎会从文件系统中把数据读出来给我们,当我们想写入数据的时候,这些存储引擎会把这些数据写回文件系统。接下来就要说下InnoDB、MyISAM两个存储引擎的数据是如何在文件系统中存储的。MySQL数据目录mysql服务器程序在启动时,会在文件系统的某个目录下家在一些原创 2021-03-26 14:45:56 · 283 阅读 · 0 评论 -
MySQL的B+树索引的使用
总结一下B+树索引的一些结论1、每个索引都对应一颗B+树,B+树分为好多层,最下面一层是叶子节点,其余的是内节点。所有用户记录都存储在B+树的叶子节点,所有目录项记录都存储在内节点。2、InnoDB存储引擎会自动为主键建立聚簇索引(如果没有显示指定主键或者没有生命不允许存储NULL的UNIQUE键,它会自动添加主键),聚簇索引的叶子节点包含完整的用户记录3、我们可以为感兴趣的列创建二级索引,二级索引的叶子节点由索引列及主键值组成。通过二级索引进行数据查找需要进行回表操作,再通过二级索引找到主键值后,通原创 2021-03-25 15:02:22 · 541 阅读 · 0 评论 -
MySQL的B+树索引详细介绍
1、在没有索引时进行数据查找select [查询列表] from 表名 where 列名 = xxx;1.1、在一个页中进行查找假设目标表中记录较少,所有记录都可以存在一个页中,在查找时可以根据搜索条件的不同分为两种情况:(1)以主键为搜索条件:可以在页目录中使用二分法快速定位到对应的槽,再遍历该槽对应的分组中的记录,即可快速找到指定的记录。(2)以其他列为搜索条件:因为没有索引,数据中并没有为非主键列建立所谓的页目录,所以无法通过二分法快速定位,这种情况下,只能从infimum记录开始依次遍历单原创 2021-03-24 15:54:20 · 349 阅读 · 0 评论 -
MySQL的InnoDB数据页结构
1 不同类型的页介绍页是InnoDB管理存储空间的基本单位,一个页的大小一般是16KB。InnoDB为了不同的目的设计了多种不同类型的页,例如存放表空间的头部信息的页,存放Change Buffer信息的页、存放INODE信息的页、存放undo日志信息的页等等。今天不准备说以上的页,而是说索引页,但是目前还是将其称之为数据页。2 数据页结构从上图中可以看出,一个InnoDB数据页存储空间大致被划分为7个部分,以下表格会说明一下这七个部分都存储一些什么内容名称中文名简单描述F原创 2021-03-23 15:19:57 · 260 阅读 · 0 评论 -
MySQL客户端与服务器连接过程
1. 客户端进程与服务器端进程间的通信方式mysql运行中的服务器程序与客户端程序实际上是一个进程,所以客户端进程向服务器进程发送请求并得到相应的过程实际上是一个进程间的通信过程,而mysql支持以下几种客户端进程与服务器端进程间的通信方式1.1 TCP/IP在真实环境中,mysql的服务器进程与客户端进程可能运行在不同的主机中,他们之间必须通过网络进行通信,mysql采用TCP作为服务器与客户端之间的网络通信协议。在网络环境下,每台计算机都有唯一的IP地址,如果某个进程需要采用TCP协议进行网络通原创 2021-03-22 16:22:39 · 756 阅读 · 0 评论 -
MySQL show profile
mysql> select version();-- profile默认是不打开的mysql> show profiles;Empty set (0.02 sec)-- 验证修改后的结果 mysql> show variables like "%pro%";-- 可以看到profiling 默认是OFF的。-- 开启profilemysql> set profiling=1;mysql> select * from test;+------------+-原创 2020-11-18 14:39:42 · 122 阅读 · 1 评论 -
mysql中索引的null值问题
在mysql中,对含有null值的索引列,以及is null、is not null的查询条件是否会走索引这点,网上有很多说法,为此我自己单独做了个实验:首先创建两张表,一张表所有字段默认为null,另一张表所有字段默认为not null。CREATE TABLE a_achievement ( s_id int(11) NULL, Math decimal(4,1) NULL, English decimal(4,1) NULL, Chinese float NULL );原创 2020-11-10 15:12:21 · 2673 阅读 · 0 评论 -
在navicat中做数据库建模
前几天,项目经理和我说要我把最近这个项目的数据表做一个关联图,我一想,这不就是数据库建模了嘛,可是公司电脑里没有power designer啊,公司电脑里还不能装外部来源的软件,这咋办,难不成要手工画图?想想就头疼,无意中就发现了navicat中居然可以做这个类似于power designer的功能:首先打开navicat for mysql,点击模型,再点击新建模型: 然后就出现了如下的一大片空白,在这个里面可以自己创建表,当然也可以将左侧数据库中的表直接拖进来,鼠标点住,一拉,表就过来了。将表拉原创 2020-11-05 08:46:31 · 3088 阅读 · 0 评论 -
MySQL中utf8与utf8mb4的区别
一、简介MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。二、内容描述那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大原创 2020-07-28 13:43:13 · 1780 阅读 · 0 评论 -
kettle抽取数据中文乱码
这类乱码问题很显然就是字符集的问题了,这时候就可以去数据库查看一下数据库的字符集,我这边出现问题的是MySQL数据库,而MySQL数据库的字符集一般都是utf8,所以我们可以在将数据插入到MySQL的表输出位置将数据设置为utf8编码。打开kettle,双击表输出,点击数据库连接旁的编辑,进入数据库连接编辑页面。再点击第二项:高级 在下方的空白处填入set names utf8。接下来点击选项,在下面表格中填入characterEncoding utf8 。接下来再执行插入就没有问题原创 2020-07-28 11:25:45 · 2297 阅读 · 0 评论 -
MYSQL EXPLAIN结果详解
EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况。EXPLAIN不考虑各种Cache(缓存)。EXPLAIN不能显示MySQL在执行查询时所作的优化工作。部分统计信息是估算的,并非精确值。 EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划。1 idselect的识别符,这是select的查询序列号。如果有两列数据id相同,则为同一组查询,由上到下执行。如果id值不同,id值越大,优先级越高。2 select_type原创 2020-07-20 14:12:39 · 2202 阅读 · 0 评论 -
mysql在查询时获取自增序号
SELECT (@i:=@i+1),A.asset_code FROM (SELECT @i:=0) as i,leo_strategic_indicators A order by A.score DESC ;将(select @i:0)作为一个派生表在通过前面的@i:=@i+1进行计算 循环加一,即可得到自增序号原创 2020-07-15 10:45:59 · 1194 阅读 · 0 评论 -
mysql的sql_mode设置及各个值含义解析
1、查询sql_modeselect @@GLOBAL.sql_mode-- 或select @@SESSION.sql_mode-- 或select @@sql_mode2、设置sql_mode通过命令设置SET GLOBAL sql_mode = 'modes...';-- 或SET SESSION sql_mode = 'modes...';在配置文件中设置在/etc/my.cnf的[mysqld]下设置[mysqld]sql_mode=STRICT_TRANS_TA转载 2020-07-10 15:34:57 · 2347 阅读 · 0 评论 -
scrapy爬取豆瓣top250并插入到MySQL数据库(入门级)
scrapy爬取豆瓣top250并插入到MySQL数据库(入门级)本地安装python,去官网下载想要的版本即可,安装之后通过命令行输入python进行验证:C:\Users\jrkj-kaifa08\PycharmProjects\fzreport>pythonPython 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 08:53:46) [MSC v.1916 64 bit (AMD64)] on win32Type "help", "copy原创 2020-07-08 13:40:16 · 3209 阅读 · 1 评论