1.秒懂数仓的前世:DBMS和OLTP到底是啥?
2.慢查询日志中的 Lock_time 从哪里来?
3.是真的猛!SQL 语法速成手册
4.SQL语言:DDL、DML、DQL、DCL详解
秒懂数仓的前世:DBMS和OLTP到底是啥?
数仓的前世是DBMS,即数据库管理系统。电销神器源码DBMS是广泛使用的软件,用于建立、使用和维护数据库。它提供数据定义语言(DDL)和数据操纵语言(DML),以定义、创建、修改数据库结构以及实现对数据库数据的插入、删除、更新操作。DBMS还提供数据库运行管理功能,包括事务的管理和自动恢复、并发控制和死锁检测、安全性检查和存取控制、完整性检查和执行、运行日志的组织管理等,以确保数据库系统正常运行。此外,DBMS还负责数据库维护,包括数据载入、转换、转储、恢复,数据库的重组织和重构,以及性能监控分析等功能。数据传送是DBMS的一个重要部分,它负责处理数据的传送,包括与操作系统、远程作业输入的交互,以及数据库之间的互操作功能。
DBMS主要应用在联机事务处理(OLTP)中,这是传统的关系型数据库的主要应用,主要用于基本的、日常的事务处理,如银行交易。DBMS提供数据定义语言(DDL)和数据操纵语言(DML),以便用户定义和管理SQL数据库中的对象。DDL包括创建、修改和删除数据库对象的语句,如CREATE、ALTER、DROP等。DML包括查询、溯源码001厂插入、更新和删除数据库中数据的语句,如SELECT、INSERT、UPDATE、DELETE等。DBMS还提供数据库运行管理功能,包括数据库安全性、存取控制、数据审计和加密、角色和权限控制等。此外,DBMS还提供数据库完整性功能,包括实体完整性、参照完整性和用户自定义完整性。
DBMS常见应用包括Oracle、Microsoft SQL Server和MySQL。Oracle Database是一款由甲骨文公司开发的关系数据库管理系统,它在数据库领域一直处于领先地位,具有处理速度非常快、安全级别高、可以做到s以内故障转移等主要特性。Microsoft SQL Server是一个全面的数据库平台,提供企业级的数据管理功能,具有图形化用户界面、伸缩性好和对web技术的支持等优点。MySQL是一种关系型数据库管理系统,具有开放源码、高度非过程化、以一种语法结构提供多种使用方式等特性,广泛应用于互联网公司。
总结DBMS的前世,对于现世数仓以及大家耳熟能详的OLAP的讲解,我们将在后续的文章中深入探讨。
慢查询日志中的 Lock_time 从哪里来?
在探讨慢查询日志中的 Lock_time 时,首先要了解的是,与这位老相识的关联并不仅限于它表示锁等待时间这一层面,而是深入理解 Lock_time 的构成以及它是如何被计算得出的。
深入研究 Lock_time 之前,我们仅知其代表锁等待时间,却未探入其具体组成与计算过程。在众多 SQL 执行时间较长的场景中,我们时常困惑于 Lock_time 的数值似乎与其等待时间并不成正比,如观察到 Lock_time 仅为 0. 秒。
本文旨在揭开 Lock_time 的面纱,探索它包含的锁等待时间的来源以及计算方式。基于 MySQL 8.0. 源码,未来轰炸系统源码我们将重点放在 InnoDB 存储引擎上,通过分析其实现逻辑,以直观呈现 Lock_time 的组成与计算过程。
首先,明确 Lock_time 的计算方法。它由表锁等待时间和行锁等待时间两部分相加形成。这启示我们,对 Lock_time 的理解不仅限于表锁等待时间的考量,还需关注行锁等待时间的计算与累加。
在表锁等待时间的实现中,源码展示了从 Sql_cmd_dml::execute() 函数开始,到 lock_external() 方法的执行,整个过程涉及多个函数和调用,包括 lock_tables()、mysql_lock_tables() 等。这一系列操作最终在 thd->inc_lock_usec() 函数中实现了表锁等待时间的累积。
值得注意的是,表锁等待时间并非单纯反映锁等待过程,它还包含了执行一些初始化操作所需的时间,如同步刷脏页操作。对于 FLUSH TABLES ... WITH READ LOCK 语句,表锁等待时间更包含了将涉及的表所属表空间的脏页同步到磁盘所需的时间。
行锁等待时间的计算则更为直接,主要关注的是在加锁过程中记录的等待时间。通过 sel_set_rec_lock() 函数进行加锁操作,当其他事务持有该记录的行锁时,等待时间即开始计算。通过代码逻辑,我们可直观理解这一过程,即在获取行锁或等待超时后,通过当前时间减去开始时间计算得到行锁等待时间。
综上所述,Lock_time 由表锁与行锁等待时间共同构成,两者在累加的过程中最终形成 Lock_time。表锁等待时间不仅包含锁等待时间本身,还可能涉及额外的初始化操作时间,而行锁等待时间则更为直接且精确。通过深入分析源码,我们对 Lock_time 的构成有了更全面的理解。
是真的猛!SQL 语法速成手册
整理非常全面,原谅我书读得少,只能用一句卧槽来赞美了!
本文针对关系型数据库的一般语法。限于篇幅,本文侧重说明用法,不会展开讲解特性、源码学院 图灵学院原理。
SQL(Structured Query Language),标准 SQL 由 ANSI 标准委员会管理,从而称为 ANSI SQL。各个 DBMS 都有自己的实现,如 PL/SQL、Transact-SQL 等。
SQL 语法结构包括:
SQL 语法要点,例如:SELECT 与 select、Select 是相同的。
SQL 分类数据定义语言(DDL):
数据定义语言(Data Definition Language,DDL)是 SQL 语言集中负责数据结构定义与数据库对象定义的语言。
DDL 的主要功能是定义数据库对象。
DDL 的核心指令是CREATE、ALTER、DROP。
数据操纵语言(DML):
数据操纵语言(Data Manipulation Language, DML)是用于数据库操作,对数据库其中的对象和数据运行访问工作的编程语句。
DML 的主要功能是访问数据,因此其语法都是以读写数据库为主。
DML 的核心指令是INSERT、UPDATE、DELETE、SELECT。这四个指令合称 CRUD(Create, Read, Update, Delete),即增删改查。
事务控制语言(TCL):
事务控制语言 (Transaction Control Language, TCL) 用于管理数据库中的事务。这些用于管理由 DML 语句所做的更改。它还允许将语句分组为逻辑事务。
TCL 的核心指令是COMMIT、ROLLBACK。
数据控制语言(DCL):
数据控制语言 (Data Control Language, DCL) 是一种可对数据访问权进行控制的指令,它可以控制特定用户账户对数据表、查看表、预存程序、用户自定义函数等数据库对象的控制权。
DCL 的核心指令是GRANT、REVOKE。
(以下为 DML 语句用法)
增删改查,又称为 CRUD,数据库基本操作中的基本操作。
插入数据:
插入完整的行、插入行的一部分、插入查询出来的数据
更新数据 删除数据:
删除表中的指定数据、清空表中的数据
查询数据:
查询单列、查询多列、查询所有列、源码相乘部分积查询不同的值、限制查询结果
子查询:
子查询是嵌套在较大查询中的 SQL 查询。子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择。
子查询的子查询、WHERE 运算符描述、运算符描述:=等于、<>不等于、注释:在 SQL 的一些版本中,该操作符可被写成 !=、>大于、<=小于等于、BETWEEN 在某个范围内、LIKE搜索某种模式、IN指定针对某个列的多个可能值。
SELECT 语句中的 WHERE 子句、UPDATE 语句中的 WHERE 子句、DELETE 语句中的 WHERE 子句。
IN 和 BETWEEN:
IN 示例、BETWEEN 示例
AND、OR、NOT:
AND 示例、OR 示例、NOT 示例
LIKE:
% 示例、_ 示例
连接和组合连接(JOIN):
内连接(INNER JOIN)、自连接、自然连接(NATURAL JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)、组合(UNION)。
组合查询
JOIN vs UNION
函数:
不同数据库的函数往往各不相同,因此不可移植。本节主要以 Mysql 的函数为例。文本处理、函数说明、函数说明、LEFT()、RIGHT()、左边或者右边的字符、LOWER()、UPPER()、转换为小写或者大写、LTRIM()、RTIM()、去除左边或者右边的空格、LENGTH()、长度、SOUNDEX()、转换为语音值、其中,SOUNDEX() 可以将一个字符串转换为描述其语音表示的字母数字模式。
日期和时间处理、函 数说 明、函 数说 明、AddDate()、增加一个日期(天、周等)、AddTime()、增加一个时间(时、分等)、CurDate()、返回当前日期、CurTime()、返回当前时间、Date()、返回日期时间的日期部分、DateDiff()、计算两个日期之差、Date_Add()、高度灵活的日期运算函数、Date_Format()、返回一个格式化的日期或时间串、Day()、返回一个日期的天数部分、DayOfWeek()、对于一个日期,返回对应的星期几、Hour()、返回一个时间的小时部分、Minute()、返回一个时间的分钟部分、Month()、返回一个日期的月份部分、Now()、返回当前日期和时间、Second()、返回一个时间的秒部分、Time()、返回一个日期时间的时间部分、Year()、返回一个日期的年份部分。
数值处理、函 数说 明、函 数说 明、SIN()、正弦、COS()、余弦、TAN()、正切、ABS()、绝对值、SQRT()、平方根、MOD()、余数、EXP()、指数、PI()、圆周率、RAND()、随机数。
汇总、函 数说 明、AVG()、返回某列的平均值、COUNT()、返回某列的行数、MAX()、返回某列的最大值、MIN()、返回某列的最小值、SUM()、返回某列值之和、AVG() 会忽略 NULL 行、使用 DISTINCT 可以让汇总函数值汇总不同的值。
排序和分组、ORDER BY、指定多个列的排序方向、GROUP BY、分组、分组后排序、HAVING、使用 WHERE 和 HAVING 过滤数据。
数据定义、DDL 的主要功能是定义数据库对象(如:数据库、数据表、视图、索引等)。
数据库(DATABASE)、创建数据库、删除数据库、选择数据库、数据表(TABLE)、创建数据表、普通创建、根据已有的表创建新表、删除数据表、修改数据表、添加列、删除列、修改列、添加主键、删除主键、视图(VIEW)、创建视图、删除视图、索引(INDEX)、创建索引、创建唯一索引、删除索引、约束、SQL 约束用于规定表中的数据规则、创建表时使用约束条件。
事务处理、(以下为 DCL 语句用法)
权限控制、创建账户、修改账户名、删除账户、查看权限、授予权限、删除权限、更改密码。
存储过程、创建存储过程、使用存储过程。
游标、十二、触发器:
触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。可以使用触发器来进行审计跟踪,把修改记录到另外一张表中。MySQL 不允许在触发器中使用 CALL 语句,也就是不能调用存储过程。BEGIN 和 END、当触发器的触发条件满足时,将会执行BEGIN 和 END 之间的触发器执行动作、注意:在 MySQL 中,分号; 是语句结束的标识符,遇到分号表示该段语句已经结束,MySQL 可以开始执行了、因此,解释器遇到触发器执行动作中的分号后就开始执行,然后会报错,因为没有找到和 BEGIN 匹配的 END、这时就会用到 DELIMITER 命令(DELIMITER 是定界符,分隔符的意思)、它是一条命令,不需要语句结束标识、语法为:DELIMITER new_delemiter、new_delemiter 可以设为 1 个或多个长度的符号、默认的是分号 ;、我们可以把它修改为其他符号、如 $ - DELIMITER $、在这之后的语句、以分号结束、解释器不会有什么反应、只有遇到了 $、才认为是语句结束、注意、使用完之后、我们还应该记得把它给修改回来。
NEW 和 OLD、创建触发器、提示:为了理解触发器的要点、有必要先了解一下创建触发器的指令、CREATE TRIGGER 指令用于创建触发器、语法、说明、示例、查看触发器、删除触发器、复制、推荐阅读、分享一套SpringBoot开发博客系统源码、以及完整开发文档、速度保存、Github上最值得学习的个Java开源项目、涵盖各种技术栈、年最新的常问企业面试题大全以及答案。
SQL语言:DDL、DML、DQL、DCL详解
SQL程序语言的四大类操作为:数据定义语言(DDL)、数据查询语言(DQL)、数据操纵语言(DML)、数据控制语言(DCL)。
数据定义语言(DDL)负责定义数据库结构,包括创建表、聚簇、索引、视图、函数、存储过程和触发器等。其语法主要由CREATE、ALTER、DROP和TRUNCATE构成。
数据操纵语言(DML)负责对数据库进行插入、删除、修改元组的操作,其语法包括insert、update、delete等。
数据查询语言(DQL)用于查询数据库中的数据,最为常用的语句为select。
数据控制语言(DCL)负责授权、回收访问数据库的权限,控制数据库事务发生的时间及效果,例如授权、取消授权、回滚、提交等操作。
接下来对SQL的用户操作进行说明:包括创建用户、给用户授权、撤销授权、查看用户权限、删除用户、修改用户密码等。
总结,SQL程序语言的四大类操作涵盖了数据库的基本操作,分别是数据定义、查询、操纵和控制。
欢迎关注公众号,免费获取海量学习资源。
历史推荐内容包括视频、源码、文档等。