数据库
文章平均质量分 82
qiyi.sky
我可复杂,简介不了。(doge)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)
InnoDB是索引组织表,数据段就是B+树的叶子节点, 索引段即为B+树的。8.0版本中默认开启) ,则每张表都会有一个。是InnoDB 存储引擎磁盘管理的最小单元。InnoDB 存储引擎数据是按行进行存放的。学习自:黑马程序员——MySQL数据库课程。一个mysql实例可以对应多个表空。是InnoDB存储引擎逻辑结构的。段用来管理多个Extent(区),每个页的大小默认为 16KB。,用于存储记录、索引等数据。表空间(xxx.ibd),每个区的大小为1M。, 如果用户启用了参数。原创 2023-12-26 08:00:00 · 724 阅读 · 0 评论 -
MySQL数据库——锁-行级锁(行锁、间隙锁和临键锁)
行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB存储引擎中。InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。行锁(Record Lock):锁定单个行记录的锁,防止其他事务对此行进行update和delete。在RC、RR隔离级别下都支持。间隙锁(Gap Lock):锁定索引记录间隙(不含该记录),确保索引记录间隙不变,防止其他事务在这个间隙进行insert,产生幻读。在RR隔离级别下都支持。原创 2023-12-22 08:00:00 · 3402 阅读 · 0 评论 -
MySQL数据库——锁-表级锁(表锁、元数据锁、意向锁)
为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。假如没有意向锁,客户端一对表加了行锁后,客户端二如何给表加表锁呢,来通过示意图简单分析一下:首先客户端一,开启一个事务,然后执行DML操作,在执行DML语句时,会对涉及到的行加锁。当客户端二,想对这张表加表锁时,会检查当前表是否有对应的行锁,如果没有,则添加表锁,此时就会从第一行数据,检查到最后一行数据,效率较低。有了意向锁之后,原创 2023-12-12 08:00:00 · 1210 阅读 · 0 评论 -
MySQL数据库——触发器-介绍、语法(创建,查看,删除)
触发器是与表有关的数据库对象,指在InsertUpdateDelete之前(BEFORE)或之后(AFTER),触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性、日志记录、数据校验等操作。使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持,不支持。INSERT型触发器NEW表示将要或者已经新增的数据UPDATE型触发器OLD表示修改之前的数据, NEW表示将要或已经修改后的数据。原创 2023-11-30 08:00:00 · 914 阅读 · 0 评论 -
MySQL数据库——存储函数(介绍、案例)
存储函数是有返回值的存储过程,存储函数的参数只能是IN类型的。当我们要执行上述定义存储函数的语句时,会出现报错,这是因为:在mysql8.0版本中binlog默认是开启的,一旦开启了,mysql就要求在定义存储函数时,需要指定characteristic特性,否则就会报错需要说明的是:存储函数使用的情况很少,因为存储函数能实现的,存储过程同样也能实现;而且,存储函数必须要有返回值。原创 2023-11-26 08:00:00 · 1493 阅读 · 0 评论 -
MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)
条件处理程序(Handler)可以用来定义在流程控制结构执行过程中遇到问题时相应的处理步骤。handler_action 的取值:CONTINUE: 继续执行当前程序EXIT: 终止执行当前程序condition_value 的取值:SQLSTATE sqlstate_value: 状态码,如 02000SQLWARNING: 所有以01开头的SQLSTATE代码的简写NOT FOUND: 所有以02开头的SQLSTATE代码的简写。原创 2023-11-22 08:00:00 · 679 阅读 · 0 评论 -
MySQL数据库——存储过程-游标(介绍-声明游标、打开游标、获取游标记录、关闭游标,案例)
游标(CURSOR)是用来存储查询结果集的数据类型 , 在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、OPEN、FETCH 和 CLOSE,其语法分别如下。原创 2023-11-18 08:00:00 · 1919 阅读 · 0 评论 -
MySQL数据库——存储过程-循环(while、repeat、loop)
repeat是有条件的循环控制语句, 当满足until声明的条件的时候,则退出循环。-- 先执行一次逻辑,然后判定UNTIL条件是否满足,如果满足,则退出。-- 如果不满足,则继续下一次循环REPEATSQL逻辑...UNTIL 条件END REPEAT;LOOP 实现简单的循环,如果不在SQL逻辑中增加退出循环的条件,可以用其来实现简单的死循环。LEAVE :配合循环使用,退出循环。ITERATE:必须用在循环中,作用是跳过当前循环剩下的语句,直接进入下一次循环。SQL逻辑...原创 2023-11-14 08:00:00 · 9927 阅读 · 2 评论 -
MySQL数据库——存储过程-if条件判断、参数、case(介绍、用法、案例)
参数的类型,主要分为以下三种:IN、OUT、INOUT。类型含义备注IN该类参数作为输入,也就是需要调用时传入值默认OUT该类参数作为输出,也就是该参数可以作为返回值INOUT既可以作为输入参数,也可以作为输出参数case结构及作用,和我们之前的流程控制函数很类似。/* 含义: 当case_value的值为 when_value1时,执行statement_list1,当值为 when_value2时,原创 2023-11-10 08:00:00 · 7317 阅读 · 0 评论 -
MySQL数据库——存储过程-变量(系统变量、用户定义变量、局部变量)
在MySQL中变量分为三种类型: 系统变量、用户定义变量、局部变量。系统变量是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL)、会话变量(SESSION)。用户定义变量 是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用 "@变量名" 使用就可以。其作用域为当前连接。局部变量 是根据需要定义的在局部生效的变量,访问之前,需要DECLARE声明。可用作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGIN ... END块。原创 2023-11-06 08:00:00 · 1167 阅读 · 0 评论 -
MySQL数据库——存储过程-介绍以及基本语法(特点、创建、调用、查看、删除、示例)
存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。可以假设,P1就是select,alter等SQL语句的集合。原创 2023-11-02 08:00:00 · 741 阅读 · 0 评论 -
MySQL数据库——视图的更新、视图作用以及案例
视图作用1.简单视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。2. 安全数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据。3. 数据独立视图可帮助用户屏蔽真实表结构变化带来的影响。原创 2023-10-28 08:00:00 · 1251 阅读 · 0 评论 -
MySQL数据库——视图-检查选项(cascaded、local)
当使用WITH CHECK OPTION子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如 插入,更新,删除,以使其符合视图的定义。MySQL允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围,MySQL提供了两个选项: CASCADED 和 LOCAL,默认值为 CASCADED。原创 2023-10-24 08:00:00 · 1287 阅读 · 0 评论 -
MySQL数据库——视图-介绍及基本语法(创建、查询、修改、删除、演示示例)
视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表(称为基表),并且是在使用视图时动态生成的。通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。原创 2023-10-20 08:00:00 · 8725 阅读 · 0 评论 -
MySQL数据库——SQL优化(3/3)-limit 优化、count 优化、update 优化、SQL优化 小结
在之前的测试中,我们发现,如果数据量很大,在执行count操作时,是非常耗时的。MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高;但是如果是带条件的count,MyISAM引起也慢。InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。原创 2023-10-16 08:00:00 · 415 阅读 · 2 评论 -
MySQL数据库——SQL优化(2/3)-order by 优化、group by 优化
Using filesort : 通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区sortbuffer中完成排序操作,所有不是通过索引直接返回排序结果的排序都叫 FileSort 排序。Using index : 通过有序索引顺序扫描直接返回有序数据,这种情况即为 using index,不需要额外排序,操作效率高。对于以上的两种排序方式,Using index的性能高,而Using filesort的性能低,我们在优化排序操作时,尽量要优化为 Using index。原创 2023-10-12 08:00:00 · 294 阅读 · 0 评论 -
MySQL数据库——SQL优化(1/3)-介绍、插入数据、主键优化
Insert如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。批量插入数据、手动控制事务、主键顺序插入,性能要高于乱序插入。大批量插入数据如果一次性需要插入大批量数据(比如: 几百万的记录),使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令进行插入。主键优化在上面提到,主键顺序插入的性能是要高于乱序插入的。 下面就来介绍一下具体的原因,然后再分析一下主键又该如何设计。原创 2023-10-08 08:00:00 · 834 阅读 · 0 评论 -
MySQL数据库——索引(6)-索引使用(覆盖索引与回表查询,前缀索引,单列索引与联合索引 )、索引设计原则、索引总结
覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到 。当字段类型为字符串(varchar,text,longtext等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO, 影响查询效率。此时可以只将字符串的一部分前缀,建立索引,这样可以大大节约索引空间,从而提高索引效率。单列索引:即一个索引只包含单个列。联合索引:即一个索引包含了多个列。索引是高效获取数据的数据结构。原创 2023-10-02 08:00:00 · 577 阅读 · 0 评论 -
MySQL数据库——索引(5)-索引使用(上),验证索引效率、最左前缀法则、范围查询、索引失效情况、SQL提示
在讲解索引的使用原则之前,先验证一下索引,看看是否能够通过索引来提升数据查询性能。在演示的时候,我们还是使用之前的一张表 tb_sku , 在这张表中准备了1000w的记录。这张表中id为主键,有主键索引,而其他字段是没有建立索引的。查询结果:可以看到即使有1000w的数据,根据id进行数据查询,性能依然很快,因为的。查询结果:我们可以看到根据sn字段进行查询,查询返回了一条数据,结果,就是因为,而造成查询。原创 2023-09-30 08:00:00 · 341 阅读 · 0 评论 -
MySQL数据库——索引(4)-SQL性能分析-profile详情、explain(profile查看指令,explain执行计划中各个字段的含义)
如果联接只使用键的最左边的前缀,或如果键不是UNIQUE或PRIMARY KEY(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref。比较值可以为常量或一个使用在该表前面所读取的表的列的表达式。在这种情况下,key列包含了使用的索引的清单,key_len包含了使用的索引的最长的关键元素。表示索引中使用的字节数,该值为索引字段最大可能长度,并非实际使用长度,在不损失精确性的前提下,长度越短越好。MySQL认为必须要执行查询的行数,在innodb引擎的表中,是一个估计值,可能并不总是准确的。原创 2023-09-26 08:00:00 · 281 阅读 · 0 评论 -
MySQL数据库——索引(3)-索引语法(创建索引、查看索引、删除索引、案例演示),SQL性能分析(SQL执行频率,慢查询日志)
通过上述指令,我们可以查看到当前数据库到底是以查询为主,还是以增删改为主,从而为数据库优化提供参考依据。MySQL的慢查询日志默认没有开启,我们可以查看一下系统变量 slow_query_log。配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息。3.创建联合索引,联合索引中,各字段的顺序是有影响的(现在仅作了解)如果是以查询为主,那么就要考虑对数据库的索引进行优化了。如果是以增删改为主,我们可以考虑不对其进行索引的优化。这时,再次查看开关情况,慢查询日志就打开了。原创 2023-09-24 08:00:00 · 297 阅读 · 0 评论 -
MySQL数据库——索引(2)-B+Tree、Hash结构,索引分类(聚集索引、二级索引)
在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能,利于排序。哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。: 这种先到二级索引中查找数据,找到主键值,然后再到聚集索引中根据主键值,获取数据的方式,就称之为回表查询。上述我们所看到的结构是标准的B+Tree的数据结构,接下来,我们再来看看MySQL中优化之后的。也就是说,如果树的高度为3,则可以存储 2200w 左右的记录。原创 2023-09-22 08:00:00 · 364 阅读 · 0 评论 -
MySQL数据库——索引(1)-概述以及B-Tree结构
索引(index)是帮助MySQL高效获取数据的数据结构有序在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。在没有索引的情况下,对表数据进行查询时(例如查询年龄等于45),需要对整个表进行扫描,一条一条地匹配是否符合查询的条件;如果运用了二叉搜索树的结构去索引,查询时就不需要进行全表扫描,很快就能找到表中年龄等于45的信息。前面我们在学习存储引擎的时候了解到,MySQL。原创 2023-09-20 08:00:00 · 134 阅读 · 0 评论 -
MySQL数据库——MySQL8.0.26-Linux版安装
1.准备Linux服务器2.下载安装包3.上传安装包4.创建目录,并解压5.安装mysql的安装包6.启动MySQL服务7.查询自动生成的root用户密码8.修改root用户密码9.创建用户10.并给root用户分配权限11.通过DataGrip远程连接MySQL原创 2023-09-18 08:00:00 · 263 阅读 · 0 评论 -
MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择
InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB是默认的 MySQL 存储引擎。MyISAM是MySQL早期的默认存储引擎。Memory引擎的表数据是存储在内存中的,由于受到硬件问题、或断电问题的影响,只能将这些表作为临时表或者缓存使用。原创 2023-09-12 08:00:00 · 567 阅读 · 0 评论 -
MySQL数据库——存储引擎(1)-MySQL体系结构、存储引擎简介
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。我们可以在创建表的时候,来指定选择的存储引擎,如果没有指定将自动选择默认的存储引擎。原创 2023-09-10 08:30:00 · 329 阅读 · 0 评论 -
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)
保证A和B加起来的账户余额要和初始状态一致。是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。事务一旦提交,它对数据库的改变就应该是永久性的(将数据提交保存在了硬盘中),接下来的其他操作或故障不应该对本次事务的修改有任何影响。一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。原创 2023-09-08 08:00:00 · 203 阅读 · 0 评论 -
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。比如下面的三个操作(张三给李四转账1000块钱):1.查询张三账户余额;2.张三账户余额-1000;3.李四账户余额+1000。在一般情况下,我们执行了操作1和2,若在2到3的过程中抛了异常,那么这时李四的余额就没有完成+1000的操作;但张三的账户余额仍减了1000,这就让张三白白丢了1000块钱了,显然不合理。原创 2023-09-06 08:00:00 · 585 阅读 · 0 评论 -
MySQL数据库——多表查询(4)-实例练习、多表查询总结
一对多:在多的一方设置外键,关联一的一方的主键多对多:建立中间表,中间表包含两个外键,关联两张表的主键一对一:用于表结构拆分,在其中任何一方设置外键(UNIQUE),关联另一方的主键。原创 2023-09-04 08:00:00 · 232 阅读 · 0 评论 -
MySQL数据库——多表查询(3)-自连接、联合查询、子查询
1.概念SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT 的任何一个。标量子查询(子查询结果为单个值)列子查询(子查询结果为一列)行子查询(子查询结果为一行)表子查询(子查询结果为多行多列)3.根据子查询位置,分为:WHERE之后、FROM之后、SELECT之后。原创 2023-09-02 08:00:00 · 2906 阅读 · 2 评论 -
MySQL数据库——多表查询(2)-内连接、外连接
语法上对表1(emp)和表2(dept)进行左外连接的查询,即表1的数据+表1与表2交集的数据。只需要将两个表调换一下位置,此处表1(dept)和表2(emp)的左外连接就相当于上一处的表1(emp)和表2(dept)的右外连接。同理,此处的右外连接查询的是表2的数据+表1与表2交集的所有数据,因而能够查询到为空的人事部。,返回A表和B表交集部分的数据。相当于查询表1(左表)的所有数据,包含表1和表2交集部分的数据。相当于查询表2(右表)的所有数据,包含表1和表2交集部分的数据。(有一个员工暂时没有部门)原创 2023-08-30 08:00:00 · 302 阅读 · 0 评论 -
MySQL数据库——多表查询(1)-多表关系(一对多、多对对多、一对一)、多表查询概述(概念、笛卡尔积、分类)
一对多(多对一)多对多一对一指从多张表中查询数据。比如要查询这两张表:然后发现,查询到的结果是25条数据很显然,这并不是我们想要的结果。出现这种情况是因为这样进行多表查询会存在无效的笛卡尔积,我们要消除无效的笛卡尔积。MySQL数据库——多表查询(1)-多表关系(一对多、多对对多、一对一)、多表查询概述(概念、笛卡尔积、分类)原创 2023-08-28 08:00:00 · 792 阅读 · 0 评论 -
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
非空约束:NOT NULL唯一约束:UNIQUE主键约束:PRIMARY KEY (自增:AUTO_INCREMENT)默认约束:DEFAULT检查约束:CHECK外键:FOREIGN KEYend学习自:黑马程序员——MySQL数据库课程。原创 2023-08-26 08:00:00 · 365 阅读 · 0 评论 -
MySQL数据库——函数-字符串函数、数值函数、日期函数、流程函数
函数是指一段可以直接被另一段程序调用的程序或代码。MySQL内置函数,主要分为四类:字符串函数数值函数日期函数流程函数原创 2023-08-24 08:00:00 · 187 阅读 · 0 评论 -
MySQL数据库——SQL(4)-DCL(管理用户、权限控制)
1.用户管理CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '密码';DROP USER '用户名'@'主机名';2.权限控制GRANT 权限列表 ON 数据库名.表名 '用户名'@'主机名';REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';end学习自:黑马程序员——MySQL数据库课程。转载 2023-08-22 08:00:00 · 306 阅读 · 0 评论 -
MySQL数据库——SQL(3)-DQL(基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询、案例练习)
DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。查询关键字:SELECTMySQL数据库——SQL(3)-DQL(基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询、案例练习)将一列数据作为一个整体,进行纵向计算。end学习自:黑马程序员——MySQL数据库课程。原创 2023-08-20 08:00:00 · 755 阅读 · 0 评论 -
MySQL数据库——图形化界面工具(DataGrip),SQL(2)-DML(插入、修改和删除数据)
1.添加数据INSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...)[,(值1,值2,...)];2.修改数据UPDATE 表名 SET 字段名1=值1,字段名2=值2,... [WHERE 条件];3.删除数据DELETE FROM 表名 [WHERE 条件];end学习自:黑马程序员——MySQL数据库课程。原创 2023-08-18 08:00:00 · 2568 阅读 · 0 评论 -
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
SQL(1)分为六点内容:SQL通用语法SQL分类DDLDMLDQLDCLSQL通用语法SQL语句可以单行或多行书写,以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性。MySQL数据库的SQL语句不区分大小写,但关键字建议使用大写。注释:单行注释: --注释内容 或 #注释内容 (MySQL特有)多行注释: /*注释内容*/CREATE DATABASE 数据库名;USE 数据库名;DROP DATABASE 数据库名;原创 2023-08-16 08:00:00 · 274 阅读 · 0 评论 -
MySQL数据库——概述-MySQL的安装、启动与停止和客户端连接、关系型数据库(RDBMS)、数据模型
数据库 存储数据的仓库,数据是有组织的进行存储 DataBase(DB)数据库管理系统 操纵和管理数据库的大型软件 DataBase Management System(DBMS)SQL 操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 Structured Query Language(SQL)原创 2023-08-14 08:00:00 · 198 阅读 · 0 评论
分享