MySQL
文章平均质量分 91
MySQL相关
adrninistrat0r
这个作者很懒,什么都没留下…
展开
-
MySQL、MariaDB、TiDB时间小数秒四舍五入与截断
在 Java 代码中将某个时间以 String、long 格式在不同系统间传递时,假如不同系统使用的数据库对超过精度时间小数秒的处理不同,当以上时间的小数部分大于等于 0.5 秒时,不同系统记录的同一个时间会相差 1 秒。假如在某系统的 Java 代码中将 Date 类型的时间写入 MySQL/TiDB 数据库精度为秒的 DATETIME、TIMESTAMP 等字段,则大约一半的时间为当前时间,一半的时间为下一秒。MariaDB 在插入时间时假如超过字段的精度,会进行截断,不会进行四舍五入。原创 2023-12-08 21:02:00 · 1189 阅读 · 0 评论 -
MyBatis SqlSession事务与批量执行正确方式(默认不生效)
某些情况下会使用MyBatis的SqlSessionFactory.openSession()方法获取SqlSession对象,再进行数据库操作,但默认情况下SqlSession的事务与批量执行均不生效,假如希望使用SqlSession时事务或批量执行能够生效,则需要进行额外的处理。原创 2023-03-06 20:28:02 · 11274 阅读 · 2 评论 -
MySQL中Spring管理的事务开启后不提交引起的事故
了解到一个事故,在MySQL数据库中,使用Spring管理的事务在开启以后没有在操作结束时提交或回滚,使得原有线程在后续执行数据库操作时可能继续使用原有事务,且不会提交,导致对数据库的修改在Java应用层认为是成功,但在数据库层最终是没有生效的,产生了比较严重的后果原创 2023-01-28 21:53:13 · 7961 阅读 · 4 评论 -
解析MyBatis XML中的数据库表名(支持MySQL)
当前项目用于解析MyBatis XML文件中sql语句使用的数据库表名,支持使用MySQL数据库(或兼容MySQL协议的数据库)的情况。原创 2023-01-01 18:00:25 · 1684 阅读 · 1 评论 -
数据源使用错误导致MySQL事务失效分析
在Java应用中使用MySQL数据库时,可能出现因为使用的数据源或数据库会话错误,导致事务失效的问题。在Java应用中使用多数据源时,可能在执行SQL语句的不同阶段使用了不相同的数据源,导致事务失效,以下主要对此类问题进行分析。...原创 2022-08-27 22:41:53 · 1683 阅读 · 0 评论 -
Spring、MyBatis、Druid、MySQL执行SQL语句与事务监控
Druid支持使用自定义Filter,可对SQL语句与事务执行按照需要进行监控。使用Druid自定义Filter监控SQL语句与事务执行的效果,可参考“数据源使用错误导致MySQL事务失效分析”。在Spring XML中,可通过以下方式,在“com.alibaba.druid.pool.DruidDataSource”对应的bean中配置Druid自定义Filter。上类FilterEventAdapter为FilterAdapter的子类。...原创 2022-08-27 22:39:35 · 1580 阅读 · 0 评论 -
Spring、MyBatis、Druid、MySQL使用事务执行SQL语句分析
使用MySQL数据库时,使用事务与不使用事务相比,出现问题时排查更复杂。不使用事务时,客户端只需要请求MySQL服务一次(只考虑显式执行的SQL语句);使用事务时,客户端至少需要请求MySQL服务四次(开启事务、执行SQL语句、提交/回滚事务、恢复自动提交)。在Java中存在一些用法会导致事务失效,有的问题比较明显可以较快定位,有的问题隐藏较深可能需要较长时间排查。因此需要对MySQL的事务执行原理进行分析,并整理用于排查事务相关问题的快速有效的方法。...原创 2022-08-27 22:38:10 · 1326 阅读 · 0 评论 -
Spring、MyBatis、Druid、MySQL不使用事务执行SQL语句分析
使用MySQL数据库时,使用事务与不使用事务相比,出现问题时排查更复杂。不使用事务时,客户端只需要请求MySQL服务一次(只考虑显式执行的SQL语句);使用事务时,客户端至少需要请求MySQL服务四次(开启事务、执行SQL语句、提交/回滚事务、恢复自动提交)。在Java中存在一些用法会导致事务失效,有的问题比较明显可以较快定位,有的问题隐藏较深可能需要较长时间排查。因此需要对MySQL的事务执行原理进行分析,并整理用于排查事务相关问题的快速有效的方法。在Java应用中访问MySQL服务时,涉及Java应用、原创 2022-08-27 22:36:40 · 1657 阅读 · 0 评论 -
tcpdump、Wireshark抓包分析MySQL SQL语句与事务执行
使用MySQL数据库时,使用事务与不使用事务相比,出现问题时排查更复杂。不使用事务时,客户端只需要请求MySQL服务一次(只考虑显式执行的SQL语句);使用事务时,客户端至少需要请求MySQL服务四次(开启事务、执行SQL语句、提交/回滚事务、恢复自动提交)。在Java中存在一些用法会导致事务失效,有的问题比较明显可以较快定位,有的问题隐藏较深可能需要较长时间排查。因此需要对MySQL的事务执行原理进行分析,并整理用于排查事务相关问题的快速有效的方法。...原创 2022-08-27 22:32:56 · 5326 阅读 · 0 评论 -
MySQL SQL语句与事务执行及日志分析
在事务的执行过程中,Java应用(MySQL客户端)、MySQL服务、存储引擎,这三者需要共同参与,都需要知道当前是否使用了事务,以及事务的当前状态。自动提交是MySQL的会话参数,默认为是,即MySQL执行SQL语句时,默认会自动提交。MySQL在事务中执行SQL时,包含三个步骤:执行START TRANSACTION或SET autocommit=0等语句,以开启事务;执行需要在事务中执行的SQL语句;执行COMMIT以提交事务;或执行ROLLBACK以回滚事务。...原创 2022-08-27 22:29:00 · 2227 阅读 · 2 评论 -
MySQL数据库字段超长问题
在向MySQL数据库表中插入或更新记录时,有时会出现字段超长的问题,包括但不限于以下场景处理上游系统发送的交易信息,将多个字段拼成一个JSON或其他格式的字符串;在增加字段,或数据较长时,写入或更新数据库时可能超长;调用下游系统的服务,返回的部分字段(如错误信息等)较长时,导致更新数据库记录失败。...原创 2022-07-30 15:52:42 · 11657 阅读 · 0 评论 -
MySQL二级索引中的主键——MySQL存在大量相同数据分页查询优化
以下主要分析,当存在大量相同数据时,分页查询如何通过二级索引中主键进行优化。原创 2022-07-25 21:34:51 · 1249 阅读 · 0 评论 -
MySQL快速比较数据库表数据
1. 前言有时需要比较MySQL不同数据库间结构相同的表数据是否相同,例如在测试环境与生产环境之间比较,或多个测试环境之间比较,以下提供一种通用的快速比较方式。2. 比较方法对于需要比较数据的数据库表,将每行中关心的字段进行拼接,计算其HASH值;再根据主键或其他字段对每行的HASH值进行排序,并将每行的HASH值拼接,对拼接结果计算最终的HASH值。在比较MySQL不同数据库间结构相同的表数据是否相同时,比较以上HASH值即可。若最终的HASH值不同,则说明数据库表中的数据不同;若最终的HASH值原创 2021-01-27 21:07:56 · 3943 阅读 · 0 评论 -
MySQL索引优化相关原理
1. 前言以下对MySQL索引的优化相关原理进行了整理,分析MySQL索引使SQL语句执行加速的原理,针对使用InnoDB 5.6版本的MySQL。关于索引条件下推的概念,可参考“MySQL如何执行查询语句”,有关于MySQL Server层与存储引擎的关系。2. MySQL索引优化相关原理2.1. MySQL索引的作用及注意事项参考 https://dev.mysql.com/doc/refman/5.6/en/optimization-indexes.html 。提升SELECT操作性能的最原创 2020-08-18 09:43:33 · 237 阅读 · 0 评论 -
MySQL索引分析除了EXPLAIN还有什么方法
1. 前言对于非数据库开发人员而言,难以对MySQL源码进行分析或调试,接近一个黑盒,但MySQL提供了一些命令及系统状态变量,可对索引及其他内容进行分析。掌握这些方法后,可以尽量深入地了解MySQL的一些实现细节。2. MySQL索引分析除了EXPLAIN还有什么方法通过以下方法,可以获得MySQL索引相关的数据,便于分析与理解索引相关的问题。2.1. 通过慢查询日志记录SQL语句执行时间参考 https://dev.mysql.com/doc/refman/5.6/en/slow-query-原创 2020-08-18 09:42:29 · 2314 阅读 · 0 评论 -
MySQL索引失效与解决方法实践
1. 前言以下测试使用MariaDB,版本为10.0.36,InnoDb版本为5.6.39-83.1。2. 测试用数据库表说明以下用于测试的数据库表为test_table_log、test_table_log2,两个表的字段相同,索引不同,如下所示:CREATE TABLE IF NOT EXISTS test_table_log( id varchar(32) NOT NULL COMMENT 'id', type varchar(20)原创 2020-08-18 09:41:31 · 960 阅读 · 0 评论 -
MySQL查询操作索引优化实践
1. 前言以下测试使用MariaDB,版本为10.0.36,InnoDb版本为5.6.39-83.1。以下针对索引的优化方法可参考“MySQL索引优化相关原理”。以下对索引的分析方法可参考“MySQL索引分析除了EXPLAIN还有什么方法”。2. 测试用数据库表说明以下用于测试的数据库表为test_table_log、test_table_log2,两个表的字段相同,索引不同,如下所示:CREATE TABLE IF NOT EXISTS test_table_log( id原创 2020-08-18 09:40:45 · 212 阅读 · 0 评论 -
MySQL limit分页查询优化实践
1. 前言以下测试使用MariaDB,版本为10.0.36,InnoDb版本为5.6.39-83.1。以下分页查询优化针对OLTP交易场景。以下对索引的分析方法可参考“MySQL索引分析除了EXPLAIN还有什么方法”。2. limit offset分页查询的问题使用limit offset方式进行分页查询时,存在以下问题:需要读取的记录数太多当使用limit offset方式进行分页查询时,偏移量对应的行数也会被读取,不会被跳过,当偏移量较大时,读取效率较低。例如查询语句使用“limi原创 2020-08-18 09:39:29 · 805 阅读 · 0 评论 -
MySQL如何执行查询语句
1. 前言以下对MySQL执行查询语句的主要步骤进行分析,未涉及连接优化、排序优化等内容。2. MySQL服务器架构在了解MySQL如何执行查询语句前,首先需要了解MySQL服务器(MySQL Server)架构。MySQL服务器架构示意图如下所示:图片来源: https://www.oracle.com/technetwork/articles/javase/figure2-large-145676.jpg 。图片来源: 《High Performance MySQL, 3rd Editio原创 2020-08-18 09:34:36 · 655 阅读 · 0 评论 -
万字解析MySQL索引原理——InnoDB索引结构与读取
1. 前言以下对InnoDB索引的结构与读取方式进行了整理,分析MySQL索引使SQL语句执行加速的原理,针对使用InnoDB 5.6版本的MySQL。2. InnoDB索引结构与读取方式总结InnoDB索引结构与读取方式总结可总结如下:InnoDB的索引使用B+树结构,非叶子节点保存指向非叶子节点或叶子节点的指针,在叶子节点保存真正的数据,叶子节点在最低的同一层级,相互之间形成了双向链表。B+树中的记录是有序的,在B+树中查找一条记录的时间复杂度为O(logbn),b为B+树的内部节点的原创 2020-08-18 09:33:21 · 1534 阅读 · 0 评论 -
MySQL更新使用二级索引字段导致死锁问题分析
1.MySQL相关文档参考参考“MySQL死锁、锁、索引相关资料整理”( https://blog.csdn.net/a82514921/article/details/104616581)。2.问题说明2.1背景说明在营销活动中,中奖的用户可领取兑换码,保存兑换码信息的数据库表结构示例如下: create table if not exists table_...原创 2020-03-02 18:18:19 · 2607 阅读 · 1 评论 -
MySQL死锁、锁、索引相关资料整理
1.MySQL文档说明1.1InnoDB死锁https://dev.mysql.com/doc/refman/5.6/en/innodb-deadlocks.html死锁是指不同的事务都无法继续的情况,由于每个事务都持有另一个需要的锁导致。因为两个事务都在等待资源可用,所以它们都不会释放它所拥有的锁。当事务锁定多个表中的行(通过如UPDATE或SELECT ... FOR ...原创 2020-03-02 18:10:29 · 1893 阅读 · 2 评论 -
MySQL时间类型与插入更新返回值总结
1.前言本文使用的测试数据库版本为“10.0.10-MariaDB-V2.0R131D001-20160907-1111”,InnoDB版本为5.6.15,与MySQL 5.6兼容,可当作MySQL 5.6.15看待。2.MySQL时间类型2.1DATE、DATETIME与TIMESTAMP类型参考MySQL文档“11.3.1 The DATE, DATETIME, a...原创 2020-03-02 13:20:12 · 1688 阅读 · 0 评论 -
yyyy与yyyy-日期比较问题
1. 问题描述在2020年1月1日生成的交易日期为2019年12月31日的交易记录文件中,出现了很多历史交易,例如交易时间2019年8月8日的交易数据。在2019年及2020年1月其他时间,未出现该问题。(数据库使用MySQL)2. 问题分析查看历史代码,找到生成交易记录文件相关的处理,会从数据库查询前一天的交易记录,生成文件。从数据库查询前一天的交易记录的SQL语句可以简化如下(字段tr...原创 2020-02-27 09:38:26 · 927 阅读 · 0 评论 -
使用MySQL存储过程批量生成或删除测试数据
1. 目标有时需要在数据库中插入大量数据,用于测试应用在大数据量时的运行是否正常,可以使用MySQL存储过程,批量生成或删除测试数据。2. 存储过程脚本在以下脚本中,每插入/删除5000条数据提交一次。插入10万条数据耗时约3.7秒,删除耗时约1.2秒。在执行批量插入/删除操作时,可以根据需要修改插入总记录数、每次事务插入的记录数、具体的插入操作、每次事务删除记录数、具体的删除操作等。2...原创 2020-01-16 22:01:05 · 925 阅读 · 0 评论