数据库与SQL语句
文章平均质量分 92
圣斗士Morty
Java开发者,技术学习爱好者,费曼技巧学习法践行者
展开
-
MySQL 面试问答
导航一、什么是回表查询?如何避免回表查询?二、为什么MySQL建议使用自增主键?什么是代理主键、业务主键?三、为什么MySQL建议单表不超过2000W数据?四、MySQL自增id用完了怎么办?五、MySQL自增主键是连续的吗?一、什么是回表查询?如何避免回表查询?索引有两种类型,一种是基于表的主键建立的主键索引,另一种是基于普通列建立的普通索引(或二级索引)。主键索引和普通索引的查询过程和查询性能是不一样的。普通索引的叶子节点除了索引数据本身外,仅只存储主键 id 值,而主键索引的叶子节点存储的是整条原创 2022-04-18 15:52:42 · 942 阅读 · 0 评论 -
JDBC——编程式事务的实现逻辑
引言数据库事务的概念和基础,总结在《MySQL 基础 ————事务与隔离级别总结》。本篇博客通过“JDBC + 纯编码”方式实现事务控制,完成一个 A 给 B 转账的小功能,在进一步熟练JDBC的编程流程的同时,重点关注 Java 语言如何操作和控制事务。一、事务自动提交的三种情况事务默认自动提交的三种情况:1、DDL操作执行后,会自动提交事务,SET autocommit=false 对该类语句不管用。不过,在DDL语言上一般不考虑事务。2、DML(增、删、改)默认情况下,执行后原创 2021-02-14 16:59:19 · 394 阅读 · 0 评论 -
JDBC——实现通用的查询
引言上一篇jdbc的文章《JDBC——概述与JDBC的使用》介绍了JDBC的概念和背景知识,同时也讨论了获取数据库连接的方式,以及简单的实现了入库操作(更新、删除同理)。本篇博客将会聚焦 PreparedStatement 的查询操作、以及 ResultSet 的结果集处理逻辑,结合 ResultSetMetaData 和反射技术实现通用的查询方法。一、Java与SQL对应数据类型转换表Java类型 SQL类型 boolean BIT byte TINYINT原创 2021-02-13 16:47:06 · 1007 阅读 · 0 评论 -
JDBC——概述与JDBC的使用
引言一直希望深入学习一下数据库持久化技术,接触过Hibernate、Mybatis,也使用过Spring事务管理来控制回滚操作,但是越发觉得底层知识有一定的知识盲区和空洞。很多ORM框架都是基于JDBC规范来进行构建的,因此,学习JDBC的基础知识势在必行。虽然不建议在实际开发中使用 JDBC API,但了解其技术背景和使用过程无疑会更好的理解构建于其上的高级框架。本篇博客总结自尚硅谷宋红康老师的视频教程,旨在记录和总结JDBC API的使用步骤和常见问题,方便未来面试和深入理解其他框架。一原创 2021-02-12 19:27:15 · 476 阅读 · 1 评论 -
MySQL 高级 —— MVCC 多版本并发控制
引言MySQL的大多数事务型存储引擎实现的都不是简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制——MVCC。包括其他数据库如Oracle等,由于MVCC并没有一个统一的实现标准,因此它们的实现原理都不尽相同。MVCC简介可以认为MVCC是行级锁的一个变种。但是它在很多情况下避免了加锁操作,因此开销很低。一般都实现了非阻塞的读操作,同时写操作也只是锁定必要的行。MVCC的实现,是通过保存数据在某个时间点的快照来实现的。也就是说,不管需要执行多长时间,每个事务看到的数据转载 2020-06-27 18:42:00 · 449 阅读 · 0 评论 -
MySQL高级 —— 查询性能优化
引言承接《MySQL高级 —— 高性能索引》,本篇博客将围绕《高性能MySQL(第三版)》第六章内容进行总结和概括。与索引的部分一样,SQL优化也是广大程序员深入MySQL的又一条必经之路。希望通过本篇博客的总结,能够为我们成为“高级工程师”添砖加瓦。本博客会从查询设计的一些基本原则开始,然后介绍一些更加深入的查询优化技巧,并介绍一些MySQL优化器的内部机制。一、查询变慢的原因MySQL执行查询时会有很多子任务,通常来说,查询的生命周期大致可以分为:从客户端,到服务器,然后在服务.原创 2020-05-24 20:57:06 · 1187 阅读 · 0 评论 -
MySQL高级 —— 高性能索引
引言最近一直在抱着《高性能MySQL(第三版)》研究MySQL相关热点问题,诸如索引、查询优化等,这阶段的学习是前一段时间MySQL基础与官方的“阅读理解”的进一步延伸。书中第五章详细阐述了如何设计高性能的索引,以及索引的诸多注意事项。之前关于索引的学习,包括《MySQL 高级 —— 复合索引简介(多列索引)》、《MySQL 高级 —— 索引实现的思考》、《MySQL 优化 —— MySQL 如何使用索引》这三篇文章,着实费了一番功夫,但随着对书中第五章内容的逐步学习,也越发觉得自己关于索引的理原创 2020-05-22 14:10:11 · 561 阅读 · 2 评论 -
MySQL 高级 —— 深入理解 InnoDB 与 MyISAM
引言本篇主要聚焦MySQL 存储引擎的优缺点。一、InnoDB 和 MyISAM 存储引擎的比较原创 2020-03-07 10:03:37 · 512 阅读 · 0 评论 -
MySQL 优化 —— EXPLAIN 执行计划详解
引言本博客总结自MySQL 官网Understanding the Query Execution Plan专题。根据我们的表、字段、索引、以及 where 子句中的条件等信息,MySQL 优化器会考虑各种技术来更高效地执行查找。一个大表中的查找不一定要读取所有记录;多表连接也不一定需要比较每条联合记录。优化器选择的执行最优查询的操作集,称为“查询执行计划”,也可以说是 EXPLAIN...翻译 2020-02-04 20:20:51 · 3834 阅读 · 0 评论 -
MySQL 优化 —— MySQL 如何使用索引
引言本文翻译自MySQL 官网 :How MySQL Uses Indexes,MySQL 版本 5.7 。提升 SELECT 操作性能最好的方式就是在查询的一列或多列上建立索引。索引的行为类似指向表数据的指针,可以让查询能够快速判断哪个记录满足 WHERE 子句中的条件,然后取得这些记录的其他字段的值。所有的 MySQL 数据类型都支持索引。虽然在可能用于查询的所有字段上都建立索引...翻译 2020-01-29 18:15:29 · 331 阅读 · 0 评论 -
MySQL 高级 —— 索引实现的思考
引言最近看了一个公开课,是有关MySQL对索引设计的思考。详细讲解了几种索引实现的设计思考与利弊辨析,讨论了为什么MySQL默认情况下会使用B树索引,B+树索引又对B树做了哪些结构改进。本片博客通过个人的学习理解和总结,由几种简单的索引数据结构,逐渐展开对B+树索引的探究和思考。一、常见的索引实现索引是帮助MySQL 高效获取数据的排好序的数据结构。它可以在几十毫秒,最多几百毫秒内...原创 2020-01-27 12:33:49 · 364 阅读 · 0 评论 -
MySQL 优化 —— ORDER BY 优化
引言本文翻译自MySQL 官网:ORDER BY Optimization,MySQL 版本:5.7。这一部分描述了MySQL何时会使用索引来满足order by子句,filesort 操作会在索引不能生效的时候被用到,以及优化器对order by的执行计划信息。order by后面有没有跟着limit,可能会返回不同的记录顺序。一、使用索引来满足 ORDER BY某些情况,M...翻译 2020-01-23 22:01:06 · 992 阅读 · 0 评论 -
MySQL 优化 —— IS NULL 优化
引言本博客翻译自 MySQL 官网:IS NULL Optimization, MySQL版本 5.7。MySQL 对 IS NULL 的优化MySQL 可以对 IS NULL 执行和常量等值判断(列名= 常量表达式,如name = 'Tom')相同的优化。MySQL 可以利用索引和范围来搜索空值。例如:SELECT * FROM tbl_name WHERE key_co...翻译 2020-01-23 13:12:44 · 7571 阅读 · 0 评论 -
MySQL 优化 —— WHERE 子句优化
引言本文翻译自 MySQL 官网:WHERE Clause OptimizationWHERE 子句优化这一部分我们来讨论对 WHERE 子句的优化处理。本部分的案例都是以 SELECT 语句为例,但这些优化同样适用于 DELETE 和 UPDATE 语句中的 WHERE 子句。注意因为对 MySQL 优化器的工作一直在进行,因此并不是全部的MySQL执行优化都在本文档中说明...翻译 2020-01-22 20:18:24 · 948 阅读 · 0 评论 -
MySQL 优化 —— SQL优化概述(优化专题开篇词)
引言最近为了研究索引的知识,特地去MySQL 官网研读了一番,发现MySQL官网有比较全面的MySQL优化方案和知识背景,所以希望通过一系列文章,将官网的知识翻译总结一下,避免日后去网上胡乱搜索产生不必要的知识勘误风险。本系列文章标题都会以 “MySQL 优化” 前缀开头,有些可能是翻译,也会有少量自己的总结和试验,针对 MySQL 5.7 版本进行。当然也并不会全部将官网的优化专题翻译完...原创 2020-01-22 19:11:18 · 1898 阅读 · 0 评论 -
MySQL 高级 —— 复合索引简介(多列索引)
引言复合索引是指包含多个列的索引,单一索引仅包含一列。不论是哪种索引,都旨在加快SQL查询速度。复合索引最多支持16个列(一定不要这么做!),索引是一种有序的数列,复合索引也是如此。相对于单一索引,复合索引有一些必须注意的使用细节,否则很容易造成索引失效,降低查询速度。而要了解这些注意细节,就必须从复合索引的作用方式入手。一、复合索引的作用方式所谓“复合”,那一定是包含有多个,...原创 2020-01-18 23:15:43 · 5264 阅读 · 1 评论 -
MySQL 高级 ———— MySQL逻辑架构图简介
引言本篇文章介绍MySQL的逻辑架构图。MySQL并不完美,但足够灵活,能够适应高要求环境。MySQL不仅可以嵌入到应用程序中,同时也可以支持数据仓库、内容搜索、和部署软件、高可用的冗余系统、在线事务处理系统等各种应用类型。一、MySQL逻辑架构MySQL最重要、最与众不同的特性就是它的存储引擎架构,这种架构将:查询处理、其他系统任务、数据的存储与提取 三部分分离。所以,带来的...转载 2019-12-15 17:53:19 · 3581 阅读 · 0 评论 -
MySQL 基础 ———— 流程控制结构
引言MySQL 中的流程控制作为基础知识的最后一块拼图,显得并不是特别重要,而且,在实际生产开发中,也往往不需要通过它来进行程序的控制,那么为什么还要学习它呢?我认为有以下几点:1、知识的完整性:虽然MySQL 的流程控制结构并不重要,但是作为MySQL 基础知识的一部分,我认为有必要将它补充完善,最起码也要掌握其基本语法和结构,不至于到了真正用的时候临时抱佛脚。2、任何知识都有其应用...原创 2019-12-08 12:34:33 · 279 阅读 · 0 评论 -
MySQL 基础 ———— 存储过程与函数
一、存储过程介绍存储过程是一组预先编译好的SQL语句的集合,可理解成批处理语句。它的优点主要有以下几点:1、提高代码的重用性;2、简化操作;3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率。二、存储过程的创建DELIMITER 定界符CREATE PROCEDURE 存储过程名(形参列表)BEGIN 存储过程体(一组合法的SQL语句)END ...原创 2019-12-08 11:13:00 · 301 阅读 · 0 评论 -
MySQL 基础 ———— 变量
一、MySQL系统变量系统变量是由系统提供,属于服务器层面。系统变量分为:全局变量和会话变量。全局变量一般要加 GLOBAL 关键字,例如在《MySQL 基础 ————事务与隔离级别总结》中提到的 GLOBAL TRANSACTION,就属于全局变量,它针对所有连接都会生效,但是一旦MySQL服务重启,同样会失效。会话变量由 SESSION 关键字修饰,一般可以省略,比如 SET...原创 2019-12-08 09:58:30 · 435 阅读 · 0 评论 -
MySQL 基础 ———— 视图的应用与总结
引言视图是一种虚拟表,和普通表的使用是一样的,视图的一大特点就是“临时性”,是通过表动态生成的数据,只保存SQL逻辑,不保存查询结果。视图在实际生产中主要有两种应用场景:1、多个地方用到同样的查询结果;2、该查询使用的SQL比较复杂。下面,我们来总结一下这个在开发中经常会用到的知识点。一、视图的优势首先,视图并不能提高SQL的性能,它的作用在于更好的组织数据。优势有以下...原创 2019-12-07 18:24:13 · 563 阅读 · 0 评论 -
MySQL 基础 ———— SAVEPOINT 的应用
引言savepoint 关键字用于在数据库事务中设置一个存储点,在一个较长的事务中暂存数据,如果在事务末尾执行回滚,可选择性的回滚到 savepoint 设置的暂存点。本文承接上一篇博客《MySQL 基础 ————事务与隔离级别总结》,进一步探讨事务在实际生产中的重要场景——回滚。一、SAVEPOINT 语法SAVEPOINT identifierROLLBACK [WORK]...原创 2019-12-07 12:59:57 · 4343 阅读 · 0 评论 -
MySQL 基础 ————事务与隔离级别总结
一、事务的概念事务主要针对查询以外的其他几项操作:插入、更新、删除,将多条SQL合并到一个执行单元中,要么全部执行成功,要么全部回滚。MySQL的TCL 事务控制语言,就是为事务而设计,接下来我们来总结一下。二、事务的 ACID 属性1、原子性原子性是指事务是一个不可分割的工作单元,不可分割,意味着要么全部执行,要么全部回滚。2、一致性事务必须使数据库从一个一致状态,变换到...原创 2019-12-07 12:03:21 · 711 阅读 · 0 评论 -
MySQL 基础————常用数据类型
引言从第一次学习mysql开始,不知道为什么MySQL的数据类型始终没有像Java 一样深入脑海,对某些数据类型的定义和用法,也并不清晰,这篇文章,就好好总结一番,将MySQL中几个常用的数据类型归纳一下。一、类型选择的原则在设计表的时候,首先就是要考虑存储的数据与MySQL的哪种类型相吻合,比如,金额,就要用数字类型,最差也要用字符串类型,日期可以是date 类型,或者也可以是字符串...原创 2019-12-06 11:29:24 · 466 阅读 · 0 评论 -
MySQL 基础———— UNION 联合查询
引言联合查询与连接查询不同,通过UNION 关键字,我们可以将多个查询语句一同执行并将结果集展示出来,不涉及到任何关联关系。UNION 的含义是“联合,并集,结合”,在MySQL中可以将多个查询语句的结果合并成一个结果集,在MySQL 不支持FULL OUTER JOIN 的情况下,弥补了“并集” 查询的短板。连接查询相关知识总结,参考《MySQL 基础 ———— 连接查询》。一、...原创 2019-11-10 11:43:40 · 3895 阅读 · 0 评论 -
MySQL 基础 ———— SQL语句的执行顺序与 LIMIT 子句
引言到目前为止,已经总结了常见的SQL子句,包括 SELECT 、FROM、JOIN ...ON、WHERE、GROUP BY、HAVING、ORDER BY。虽然SQL的书写顺序是固定的,但在MySQL引擎中执行的顺序并不完全和书写顺序一致。除了上述这些子句,下面将会介绍另一个比较常用的子句 LIMIT ,并且总结一下SQL 语句的执行顺序。一、LIMIT 子句LIMIT 子句...原创 2019-11-10 10:40:36 · 9417 阅读 · 0 评论 -
MySQL 基础 ———— 子查询
引言承接《MySQL 基础 ———— 连接查询》,本文介绍和展示SQL中子查询的使用。子查询是出现在其他语句中的select 语句,也称为内查询。外部的查询语句,称为主查询或外查询。一、子查询的分类和支持的子句按照子查询出现的位置,可以分为:select 后面、from 后面、where 或 having 后面、exists 后面(相关子查询)。按照子查询的结果集或者功...原创 2019-11-03 23:03:57 · 1224 阅读 · 1 评论 -
MySQL 基础 ———— 连接查询
引言本篇文章承接《数据库与SQL语句》专栏,进入DQL的重要环节,可以说,这一部分的内容应该占据SQL语言的大部分使用场景。本篇的连接查询知识,和后面的一些重要的查询知识总结,共同构成了在工作中80%的MySQL应用场景。应该算是基础且重要的部分。同时,我还希望能够通过更加简洁的语言总结和归纳出从需求快速定位SQL模板的口诀,比如有一个非常复杂的查询需求,那么如何通过有效的思考路径快速...原创 2019-10-24 23:46:49 · 564 阅读 · 2 评论 -
MySQL 基础 ———— 分组查询
引言承接上一篇《MySQL 基础 ————高频函数总结》,本篇单独针对分组查询进行简单的总结和归纳,并为后续更为复杂的DQL 语句做好铺垫。查询语句:SELECT AVG(salary) FROM teacher;实际上是以全表的 salary 字段来求平均值。但是在实际应用中往往有一些特殊的需求,比如,求每个部门的平均工资。这个时候就需要将表进行分组,然后再进行查询。上...原创 2019-10-23 21:40:07 · 467 阅读 · 0 评论 -
MySQL 基础 ————高频函数总结
一、MySQL函数调用方式函数调用的基本语法:SELECT 函数(实参列表) [FROM 表]其中,对于函数,需要重点关注三点:1、函数的名称2、参数列表3、函数功能二、函数的分类在 MySQL中,函数分为两类:1、单行函数;2、分组函数。2.1 单行函数单行函数有 concat、length、ifnull 等。单行函数下还有多种分类。2.1.1...原创 2020-01-03 16:54:57 · 987 阅读 · 1 评论 -
MySQL————表维护相关低频操作总结
引言一些对表结构的修改操作是日常数据库操作中非常低频的,这就好像盖完了一栋楼之后,很少会去动地基,不过这种情况在实际开发当中并非完全没有可能,因此,此篇博客主要总结表结构修改相关的语句。一、备份表如果要执行一些修改表结构的操作,建议可以先对表整体进行备份:CREATE TABLE old_table_bak SELECT * FROM old_table;注意 ,备份生成的表...原创 2019-09-08 07:41:29 · 287 阅读 · 1 评论 -
交易系统如何确保账簿100%准确
转自廖雪峰老师的《交易系统如何确保账簿100%准确》这篇文章阐述了一个交易系统中对账功能的关键,即:时刻保证资产负债表总额始终为 0。交易系统中,对账是一个大问题。对账处理不好,不但需要花费大量的人力去处理账簿,还要承担很大的线上修改账簿的风险。如果系统能自动化保证账簿每时每刻100%准确,不能说一劳永逸地解决了所有问题,至少解决了绝大部分问题。如何对账,能时刻确保账簿100%...转载 2019-01-21 11:47:51 · 433 阅读 · 0 评论 -
MySQL——JSON_REPLACE()函数修改JSON属性值
引言由于对mysql的函数并不了解,之前遇到了一个场景:mysql表中有一个字段res_content 是一个由longtext类型(可以理解为一个更长的varchar)保存的巨大的JSON对象,但是,由于录入的疏忽,导致这个json对象中的有一个属性值错误,需要重新修改这个json对象的属性值,于是,我将整个json对象,也就是res_content字段重新替换了一遍。=。= |||...原创 2019-01-18 11:28:18 · 21946 阅读 · 4 评论 -
SQL关联查询————LEFT JOIN关键字的使用
引言关联查询一直是非常重要的SQL使用技巧。在一次查询操作中,使用mybatis进行条件查询,在没有使用 LEFT JOIN 关键字的情况下是这样写的: <!-- 查找成员 --> <select id="selectUsers" resultMap="selectUsers_ResultMap"> SELECT * ...原创 2018-08-14 00:22:05 · 16529 阅读 · 0 评论 -
MySQL日期类型的处理总结
一、概述MySQL中的日期类型包括以下5种:类型 大小 (字节) 范围 格式 用途 DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值 TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间 YEAR 1 19...原创 2018-05-31 20:56:22 · 4328 阅读 · 0 评论 -
MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?
一、MySQL索引类型MySql常见索引类型有:主键索引、唯一索引、普通索引、全文索引、组合索引PRIMARY KEY(主键索引)ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) UNIQUE(唯一索引)ALTER TABLE `table_name` ADD UNIQUE (`column`)INDEX(普...转载 2018-05-27 09:12:35 · 20294 阅读 · 1 评论 -
MySQL忽略主键冲突,避免重复插入数据的三种方式
方案一:ignore插入时检索主键列表,如存在相同主键记录,不更改原纪录,只插入新的记录。INSERT IGNORE INTOignore关键字所修饰的SQL语句执行后,在遇到主键冲突时会返回一个0,代表并没有插入此条数据。如果主键是由后台生成的(如uuid),我们可以通过判断这个返回值是否为0来判断主键是否有冲突,从而重新生成新的主键key。这是此ignore关键字比较常用的一...转载 2018-05-07 23:48:15 · 21722 阅读 · 1 评论 -
MongoDB学习手记
MongoDB是一种非关系型数据库。现在很多人在使用,也是非常火的一款非关系型数据库。(在网上也有很多关于这个数据库的负面文章,比如哪里哪里不好,等等,但是那都是人家经过使用之后得来的结论,我可不能这样想,否则会一叶障目,作为一个程序员一定要做到客观与逻辑,不可主观、武断。还是那句话,没有调查就没有发言权。我要做到精通,并已经达到全面了解一项技术的优缺点之后,再去评论一项技术的优劣,否则只能是一个...原创 2016-11-20 11:33:15 · 734 阅读 · 0 评论