数据库
一只老风铃
欣于所遇,暂得于己,快然自足。
展开
-
InnoDB索引①:B+树索引
InnoDB索引索引是数据库应用设计和开发中的重要技术手段,其通过选取记录的一列或者多列,在此基础上建立相应的数据结构,从而达到快速查询的目的。InnoDB存储引擎主要支持的索引类型包括:B+树索引、自适应Hash索引、全文索引。B+树索引是传统意义上的索引的实现方式,也是关系数据库中目前使用最多的索引方式。B+树本质为多路查找树,其根据key定位相应的叶子节点,从而快速的查询相应的数据。通过B+树索引可以定位到目标数据所在的页,将相应的页从磁盘加载进内存,从而寻找到其中数据。B+树数据结构B原创 2020-12-06 13:31:02 · 846 阅读 · 0 评论 -
SQL 牛客SQL实战
题目描述给出每个员工每年薪水涨幅超过5000的员工编号emp_no、薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列。提示:在sqlite中获取datetime时间对应的年份函数为strftime('%Y', to_date)(数据保证每个员工的每条薪水记录to_date-from_date=1年,而且同一员工的下一条薪水记录from_data=上一条薪水记录的to_data)CREATE TABLE `salaries`原创 2020-08-13 09:42:13 · 261 阅读 · 0 评论 -
SQL 牛客SQL实战
题目描述查找薪水变动超过15次的员工号emp_no以及其对应的变动次数tCREATE TABLE `salaries` (`emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`from_date`));输出描述:emp_no t 10001 17 10004 16.原创 2020-08-12 15:24:12 · 422 阅读 · 1 评论 -
数据库 锁
锁是多事务数据库进行并发控制确保一致性,正确性的方式MySQL锁示意图: 对于UPDATE、DELETE、INSERT语句,InnoDB会自动给涉及数据集加排他锁(X) MyISAM在执行查询语句SELECT前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预 ——从锁的粒度,我们可...原创 2019-02-25 18:59:34 · 212 阅读 · 0 评论 -
数据库 索引的使用
——在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。优点:可以快速检索查询,减少IO次数;根据索引排序和分组,可以加快排序和分组 缺点:索引本身也是物理表,会占用存储空间,索引表的创建和维护需要一定消耗,这个成本随数据...原创 2019-03-04 10:14:35 · 254 阅读 · 0 评论 -
数据库 视图
——视图在关系数据库中,将一组查询指令构成的结果集,组合成可查询的数据表的一种数据库对象。与数据表不同的是,数据表是一种实体结构(Physical Structure),但视图表是一种虚拟结构(Virtual Structure),在实体数据表中的改变都可以立刻反映在视图表中,不过部分数据库管理系统也支持具更新能力的视图表(Updatable View)。视图表具有下列的好处:可...原创 2019-03-19 16:03:45 · 135 阅读 · 0 评论 -
数据库 SQL查询语句的解析顺序
SQL的一个明显特征是解析代码的顺序。在大数语言中,代码按编码顺序被处理,但是在SQL语言中,顺序却并非如此,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理。 每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对外部查询不可见。只是最后一步生成的表才会返回给调用者。 一个查询SQL语句:(...原创 2019-03-24 08:47:47 · 803 阅读 · 0 评论 -
数据库 SQL语言分类
SQL语言主要分为4大类: DDL、DQL、DCL、DML——DQL 数据查询语言 其基本结构为:SELECT <字段> FROM <表> WHERE <筛选条件>——DDL 数据定义语言包括数据库基本表、视图、索引得定义,数据定义语言是隐式提交,无法rollback——DCL 数据控制语言控制不同用户得访问权限,...原创 2019-03-27 08:43:27 · 240 阅读 · 0 评论 -
数据库 数据不一致性
一般导致数据库中数据不一致的根本原因有三种情况。第一种是数据冗余造成的,第二种是并发控制不当造成的,第三种是由于某种原因(比如软硬件故障或者操作错误)导致数据丢失或数据损坏。第一种情况:数据冗余假如数据库中两个表都放了用户的地址,在用户的地址发生改变时,如果只更新了一个表的数据,那么两个表就有了不一致的数据。第二种情况:并发控制不当假如在飞机票订票系统中,如果两个购票点同时查...原创 2019-09-02 10:13:27 · 3066 阅读 · 0 评论 -
数据库 聚集索引
聚集索引是一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序。聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值...原创 2019-09-04 10:41:23 · 599 阅读 · 0 评论 -
InnoDB Master Thread工作方式
InnoDB存储引擎的主要工作由一个单独的后台线程Master Thread中完成——较早版本的Master ThreadMaster Thread具有最高的线程优先级别。其内部多个循环组成:主循环、后台循环、刷新循环、暂停循环。Master Thread会根据数据库运行状态在这些状态中切换。——Loop主循环大多数操作在这之中进行,其中2大部分操作——每秒的操作和每10秒的操作。...原创 2019-02-25 18:42:57 · 293 阅读 · 0 评论 -
InnoDB CheckPoint检查点
缓冲池设计的目的是为了协调CPU速度和磁盘速度的鸿沟。因此页的操作首先会缓冲池中进行。如果一条DML语句,如Update或者Delete改变了页中的记录,那么此页是脏页,即缓冲池的页的版本要比磁盘的新。数据库需要将最新版本的页从缓冲池刷新到磁盘。倘若每次一个页发生变化,就将此页的版本刷新到磁盘,那么这个开销过于庞大。若热点数据集集中在几个页中,那数据库的性能变得非常差。同时,如果在从缓冲池将页...原创 2019-02-25 17:18:20 · 936 阅读 · 0 评论 -
SQL 左连接查询
查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工CREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_no` char(4) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMA...原创 2019-02-22 23:04:59 · 6296 阅读 · 0 评论 -
SQL Count()函数
CREATE TABLE `salaries` (`emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`from_date`));查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅...原创 2019-02-22 23:19:52 · 961 阅读 · 0 评论 -
数据库 数据不一致性
3种数据不一致性1、丢失修改(lost update)两个食物T1和T2读入同一数据并修改,T2提交结果破坏了T1提交的结果,到这T1的修改被丢失。2、不可重复读(Non-Repeatable Read)不可重复读是指事务T1读取数据后,事务T2执行修改操作,使T1无法再现前一次读取的结果3、读“脏”数据(dirty read)读“脏”数据是指事务T1修改某一数据,并将其写...原创 2019-02-19 21:24:40 · 2140 阅读 · 0 评论 -
数据库 SQL基本操作一
SQL 分类: DDL —数据定义语言 (Create , Alter , Drop , DECLARE) DML —数据操纵语言 (Select , Delete , Update , Insert) DCL —数据控制语言 (GRANT , REVOKE , COMMIT , ROLLBACK) ——创建数据库Create DATABASE database-nam...原创 2019-02-19 12:33:51 · 121 阅读 · 0 评论 -
数据库 SQL基本操作二
——复制表 ( 只复制结构 , 源表名: a 新表名: b) 法一: select * into b from a where 1<>1法二: select top 0 * into b from a ——拷贝表 ( 拷贝数据 , 源表名: a 目标表名: b) insert into b(a, b, c) select d,e,f from b; ——跨数...原创 2019-02-19 12:40:54 · 174 阅读 · 0 评论 -
InnoDB MySQL存储引擎概述
存储引擎是一个数据库的核心模块,对于MySql数据库,其存储引擎可分为官方引擎和第三方引擎。——InnoDB存储引擎InnoDB存储引擎支持事务,其设计目标主要面向在线事务处理的应用。其特点是行锁设计、支持外键、非锁定读(即默认读取操作不会产生锁),从MySQL5.5.8版本开始,InnoDB是其默认存储引擎InnoDB存储引擎将数据放在一个逻辑的表空间,这个表空间就像一个黑盒一样由I...原创 2019-02-24 17:10:38 · 208 阅读 · 0 评论 -
InnoDB 体系架构-后台线程
InnoDB存储引擎包含多个内存块,多个内存块组合成一个大的内存池负责的主要工作:——维护线程需要访问的多个内部数据结构——缓存磁盘上的数据,方便快速的读取,同时对磁盘文件的修改之前在内存池中缓存——重做日志(redo log)缓冲后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存是最近的数据。此外,将已修改的数据文件刷新到磁盘文件中,同时保证出现异常时能够...原创 2019-02-24 18:40:40 · 722 阅读 · 0 评论 -
InnoDB 体系架构-内存
——缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理,因此可将其视为基于磁盘的数据库系统。在数据库系统中,由于CPU速度与磁盘速度的鸿沟,基于磁盘的数据库系统通常需要缓冲池技术提高整体性能缓冲池简单而言是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响。在数据库中进行读取页的操作,首先将从磁盘读到的页存放在缓冲池中,下一次读取到相同的页时,...原创 2019-02-24 19:23:16 · 225 阅读 · 0 评论 -
数据库 三级封锁协议
——并发事务在读写数据时容易发生数据读写错误,通过锁的方式确保并发事务的正确性—— 三级封锁协议: 在运用X锁和S锁对数据对象加锁时,还需要约定一些规则 ,例如何时申请X锁或S锁、持锁时间、何时释放等。称这些规则为封锁协议(Locking Protocol)。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。—— 一级封锁协议一级封锁协议是:事务T在...原创 2019-03-01 11:36:22 · 9374 阅读 · 4 评论 -
SQL 查询最晚入职的员工
查询最晚入职的员工 CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`first_name` varchar(14) NOT NULL,`last_name` varchar(16) NOT NULL,`gender` char(1) NOT NULL,`hire_da...原创 2019-02-22 22:36:12 · 3557 阅读 · 0 评论