MySQL
文章平均质量分 67
长安明月
这个作者很懒,什么都没留下…
展开
-
MySQL 如何统计一个数据库中每个表的数据量
MySQL 如何准确统计每张表的数据量原创 2023-10-09 17:43:01 · 1348 阅读 · 0 评论 -
MyBatis foreach 标签常用方法总结
在 MyBatis 中,常常会遇到集合类型的参数,虽然我们可以通过 OGNL 表达式来访问集合的某一个元素,但是 OGNL 表达式无法遍历集合。foreach 标签就是专门用来解决这类问题的,foreach 标签可以用来遍历数组、列表和 Map 等集合参数,实现批量操作或一些简单 SQL 操作。 foreach 元素的属性主要有 item,index,open,separator,close,collection。各属性含义如下所示。 集合中元素迭代时的别名,该参数为必选。 在 list 和数组中原创 2022-12-06 14:48:09 · 16548 阅读 · 0 评论 -
解决使用 Idea 自带的 Database 连接 MySQL,测试连接按钮灰色问题
我的 MySQL 连接驱动文件在本地位置 C:\Program Files (x86)\MySQL\Connector.J 5.1,配置好上述信息后,依次点击右下角 Apply 、OK 按钮完成配置,再重新测试,发现已成功了。打开 Idea 自带的 Database,选择左下方的 MySQL,取消勾选 Use MySQL Connector/J [latest],在下方添加本地连接驱动。使用 Idea 自带的 Database 连接 MySQL 时发现测试连接按钮一直是灰色的,如下图所示。原创 2022-10-24 14:56:19 · 2469 阅读 · 0 评论 -
MyBatis 查询 MySQL 实现返回 List<Map> 或 Map 类型数据操作
MyBatis 查询 MySQL 数据库,返回结果可以是具体的类、Map、List 等等。将查询结果返回 Map 类型的优点是,不需要为本次查询额外创建类。如果只查询某几个特定的列,且不想额外创建类的话,就可以将结果返回 Map 或 List。如果能明确查询结果只有一条记录时,返回 Map;如果查询结果可能有多条记录,返回 List。实现方式较为简单,只要在 DAO 层 XML 文件中,设定 resultType 而不设定 resultMap 就可以了。详见下文示例。原创 2022-09-09 10:50:03 · 25173 阅读 · 4 评论 -
MySQL 事务的特性
MySQL 事务具有四大特性,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。1、原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。2、一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性原创 2021-10-13 21:43:39 · 3403 阅读 · 0 评论 -
MySQL “Insert into select“ 死锁情况分析
一、前言 这天 xxx 接到一个需求,需要将表 A 的数据迁移到表 B 中去做一个备份。本想通过程序先查询出来然后批量插入。但 xxx 觉得这样有点慢,需要耗费大量的网络 I/O,决定采取别的方法进行实现。 通过在百度的海洋里遨游,他发现了可以使用 insert into select 实现,这样就可以避免使用网络 I/O,直接使用 SQL 依靠数据库 I/O 完成,这样简直不要太棒了。 然后他就被开除了。二、事故发生的经过 由于数据库中 order_today 数据量过大,当时好像有 7转载 2021-04-30 16:39:50 · 1402 阅读 · 1 评论 -
mysqldump 命令参数大全
mysqldump 是一个数据库备份程序。 mysqldump 客户端执行逻辑备份,生成一组 SQL 语句,可以执行这些语句来重现原始数据库对象定义和表数据。它导出一个或多个 MySQL 数据库进行备份或迁移到另一个 SQL server。mysqldump 命令还可以生成 CSV、其他分隔文本或 XML 格式的输出。 本文对其常用参数总结如下,用户也可以通过 “man mysqldump” 或 “mysqldump --help” 查看其全面的用法。--all-databases, -A原创 2021-04-30 09:36:30 · 6747 阅读 · 0 评论 -
采用 tee 命令记录 MySQL 客户端的所有操作命令,并将结果保存到指定文件
有时我们需要执行大量的 SQL 命令,并将执行结果保存到本地,方便后续分析处理。如何实现这一诉求呢?方法比较多,本文简单采用 tee 命令实现。 Linux tee 命令用于读取标准输入的数据,并将其内容输出成文件。tee 指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件,其语法如下所示。tee [-ai][--help][--version][文件...] 参数详解:-a 或 --append:附加到既有文件的后面,而非覆盖它。-i 或 --ignore-int原创 2021-04-23 14:48:00 · 1583 阅读 · 0 评论 -
MySQL 注释符号
MySQL 注释符号有三种,分别如下所示。 1. #... 2. "-- "(注意:"--" 后面有一个空格) 3. /*...*/ 如下 test.sql 文件示例。-- 查询全部服务商select * from tbl_onl_sp;#查询全部服务商select * from tbl_onl_sp;/*查询全部服务商*/select * from tbl_onl_sp;...原创 2021-04-22 09:47:58 · 6115 阅读 · 0 评论 -
MySQL CASE 语句实现多重条件判断
除了 IF 函数,MySQL 还提供了一个替代的条件语句 CASE。 MySQL CASE 语句使代码更加可读和高效。 CASE 语句有两种形式:简单 CASE 语句和可搜索的 CASE 语句。一、简单 CASE 语句 简单 CASE 语句是指使用简单 CASE 语句来检查表达式的值与一组唯一值的匹配。其语法如下所示:CASE <表达式> WHEN <值1> THEN <操作> WHEN <值2> THEN <操作>原创 2021-04-20 16:34:06 · 11023 阅读 · 2 评论 -
MySQL 按照条件统计多张表记录数总数
一、诉求 数据库中有 4 张订单表,分别为 tbl_test_order01、tbl_test_order02、tbl_test_order03,tbl_test_order04,分别用于存储四个季度的订单表数据。各表的表结构均相同,以 tbl_test_order01 为例,其表结构如下所示。 诉求:统计全年成功交易订单笔数。mysql> show full columns from tbl_test_order01;+------------+-----------+---------原创 2021-04-11 17:35:37 · 1990 阅读 · 0 评论 -
MySQL 计算某列数据的除数并保留两位小数(MySQL 除法运算保留指定位数的小数)
MySQL 数据库中,订单表 tbl_test_order01 中有一列 order_at,字段类型是 int(11),表示订单金额。现在需要将 order_at 除以 1000,并原创 2021-04-11 15:12:15 · 15093 阅读 · 1 评论 -
MySQL COALESCE() + SUM() 函数实现结果为空时返回 0
MySQL 数据库中有订单表 tbl_test_order01,存储订单数据。其表结构如下所示。mysql> show full columns from tbl_test_order01;+------------+-----------+-----------------+------+-----+-------------------+-----------------------------+---------------------------------+-------------原创 2021-04-02 15:29:33 · 1219 阅读 · 0 评论 -
MySQL 中 order by 与 limit 混用,分页结果与预期不符
在 MySQL 中我们常常用 order by 来进行排序,使用 limit 来进行分页,当需要先排序后分页时我们往往使用类似的写法 “select * from 表名 order by 排序字段 limit M,N”。但是这种写法却隐藏着较深的使用陷阱。在排序字段有数据重复的情况下,会很容易出现排序结果与预期不一致的问题。一、异常现象 比如在 5.6.17 版本的 MySQL 数据库中,有一张 tbl_mgm_tour 表,表结构如下:mysql> show full columns f原创 2021-02-22 15:11:44 · 1282 阅读 · 0 评论 -
采用 expect 自动交互命令导出 MySQL 数据库表
平常 MySQL 数据库表导出时,可以用如下命令格式。mysqldump -h [mysqlhost ip] -P [mysql port] -u [mysql user] -p [mysql database] --single-transaction --skip-opt -t --skip-tz-utc > [filename]各参数意义如下:[mysqlhost ip]:数据库 IP[mysql port]:数据库端口[mysql user]:数据库访问用户[mysql dat原创 2020-11-24 10:34:42 · 512 阅读 · 0 评论 -
MySQL 查看每个 IP 的连接数
查看 MySQL 每个 IP 的连接数语句:mysql> SELECT SUBSTRING_INDEX(HOST,':',1) AS ip , COUNT(*) FROM information_schema.processlist GROUP BY ip;+--------------+----------+| ip | COUNT(*) |+--------------+----------+| 106.54.90.27 | 3 |+-------.原创 2020-11-03 11:14:22 · 2104 阅读 · 0 评论 -
MySQL 如何查询更新时间在几小时之内的数据
MySQL 数据库表 tbl_mgm_test 中有一个字段 rec_upd_ts(记录更新时间),数据类型为 timestamp,非空约束为 NOT NULL, 默认值为 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。 如题,如何查询更新时间在 3 小时之内的数据?SQL 语句如下所示。SELECT * FROM tbl_mgm_test WHERE rec_upd_ts >= DATE_SUB(NOW(), INTERVAL原创 2020-09-21 10:46:36 · 3372 阅读 · 0 评论 -
MyBatis Generator 无法生成 selectByPrimaryKey、updateByPrimaryKey、deleteByPrimaryKey等主键操作方法
SpringBoot 项目采用 MyBatis Generator 插件为表 tbl_onl_test 生成 Mapper 文件时,发现生成的文件比以往少了 selectByPrimaryKey、updateByPrimaryKey、deleteByPrimaryKey 等几个方法,对应的 xml 文件中同样也少了这几个,并且 xml 文件中的 resultMap 节点里主键 id 使用的是 result 标签,而不是id标签,现象如下所示。 tbl_onl_test 表结构:CREATE TAB原创 2020-07-31 16:07:59 · 2000 阅读 · 1 评论 -
MyBatis Generator 插件遇到数据库密码含有 & 等特殊符号的解决方法
SpringBoot 项目,当使用 generator 插件生成代码时,发现报错:[ERROR] XML Parser Error on line 16: 对实体 “T” 的引用必须以 ‘;’ 分隔符结尾。 项目中的 generator.xml 数据库 jdbcConnection 配置如下所示:13 <jdbcConnection driverClass="com.mysql.jdbc.Driver"14 connectionURL="j原创 2020-07-31 10:41:15 · 1414 阅读 · 0 评论 -
MySQL 将 A 表部分列数据迁移到 B 表指定列
MySQL 中创建了新表 tbl_mgm_test1,表中部分列数据来源于旧表 tbl_mgm_test 中的部分属性列,要实现旧表部分列数据迁移到新表指定列,可按照如下语句实现。 查看当前 mysql 的所有数据库:mysql> select * from INFORMATION_SCHEMA.SCHEMATA;--或者mysql> show databases; 查看当前 mysql 的指定库的指定表的所有列:mysql> select * from INFORM原创 2020-07-20 16:37:06 · 1361 阅读 · 0 评论 -
MySQL 导出表指定列到文件,将本地文件数据导入表指定列
一、MySQL 数据库,将表 tbl_mgm_test 中的部分属性列数据导出到本地 CSV 文件:SELECT test_id, test_nm, test_tp, test_url FROM tbl_mgm_test INTO OUTFILE 'D:/test.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ; 二、MySQL 数据库,将本地 CSV 文件数据导入到表指定列:LOAD DATA LOCAL原创 2020-07-17 14:53:07 · 1401 阅读 · 0 评论 -
Linux 环境下,查看 MySQL 使用的配置文件
通过 which 命令可以查看 mysql 安装路径,如下所示。$ which mysql /usr/bin/mysql 如果服务器没有安装 mysql 命令,可以使用绝对路径下的 mysql 命令,查看配置文件在哪。如果 Linux 服务器已配置好 mysql 命令,也可以直接使用 mysql 命令查看。具体语句如下所示。$ /usr/bin/mysql --verbose --help | grep -A 1 'Default options'$ mysql --verbose --h原创 2020-07-02 09:25:35 · 2066 阅读 · 0 评论 -
MyBatis 游标查询大量数据
当查询百万级或千万级大数据量的时候,MyBatis 普通查询(一次性查询出所有数据,将查询后的结果集全部塞给客户端)可能会 OOM(OutOfMemoryError)。使用游标可以节省内存消耗,不需要一次性取出所有数据,只需一次查询指定 fetchSize 的数据,直到把数据全部处理完。以下是项目中的demo。 数据库表 tbl_mgm_menu 中已构造出大量数据(如何构造大量测试数据,见上一篇博客《MySQL - 使用存储过程快速制造大量测试数据》),springboot + mybatis 项原创 2020-06-28 16:14:44 · 9640 阅读 · 6 评论 -
MySQL - 通过 SQL 函数获取各汉字首字母
项目中有一张 MySQL 数据库表格,各属性列如下图所示。 city_nm 为城市名,city_py 为城市名汉字首字母,如何将 city_nm 列批量处理,得出其汉字首字母,赋值到 city_py 列?MySQL 函数(function)可以快速帮我们实现这一诉求。函数如下所示。DELIMITER $$DROP FUNCTION IF EXISTS `getPY`$$CREATE FUNCTION `getPY`(in_string VARCHAR(21845)) RETURNS VA原创 2020-06-24 16:04:47 · 1907 阅读 · 8 评论 -
MySQL - 使用存储过程快速制造大量测试数据
Java Web 项目开发,有时需要测试代码操作数据库的性能,往往需要大量的测试数据。编造大量测试数据,有多种方法,如 Java 多线程插入数据,Jmeter 发包工具插入数据,导入 excel 文件数据等等。笔者经常使用的一种方法是,用 MySQL 存储过程制造测试数据,以下做个简单总结。 以 MySQL 数据库表 tbl_mgm_menu 为例,其建表语句如下。DROP TABLE IF EXISTS `tbl_mgm_menu`;CREATE TABLE `tbl_mgm_menu` (原创 2020-06-23 11:12:35 · 1509 阅读 · 0 评论 -
windows 系统下配置 MySQL 环境变量
程序员在本地 windows 系统开发 web 应用时,可能需要登录 MySQL 数据库查看数据,若本机没有配置 MySQL 环境变量,直接打开 CMD 窗口输入命令行登录的话,会提示:‘mysql’ 不是内部或外部命令,也不是可运行的程序或批处理文件。如下所示。C:\Users\***>mysql -h localhost -P 3306 -uroot -p'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件。C:\Use原创 2020-06-19 15:15:57 · 822 阅读 · 0 评论 -
SpringBoot 整合 MyBatis 配置多数据源操作MySQL数据库
本文以多个 MySQL 数据库为例,采用 SpringBoot 框架,整合 MyBatis 配置多数据源进行数据库操作。在实际项目中,为了减少流量高峰期间对数据库的压力,可对一些数据库惰性数据(以查询为主,且不经常更新的数据)缓存到 JVM 内存中,可快速响应,且减少数据库压力。项目源码 git 地址:https://github.com/piaoranyuji/muldb一、MySQL 表结...原创 2020-01-21 18:54:26 · 1378 阅读 · 0 评论 -
MySQL 常用命令整理
本文以常用的关系型数据库 MySQL 为例,分别从定义、语言分类及具体示例,介绍 MySQL 常用命令。一、什么是 SQL?SQL 指结构化查询语言,是 “Structured Query Language” 的简写SQL 使我们有能力访问数据库SQL 是一种 ANSI (美国国家标准化组织)的标准计算机语言二、SQL 语言的分类DDL(Data Definition Langu...原创 2020-01-19 10:48:34 · 227 阅读 · 0 评论 -
MySQL Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
MySQL 数据库出现:Host is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’ 问题。原因:同一个 ip 在短时间内产生太多(超过 MySQL 数据库 max_connection_errors 的最大值)中断的数据库连接而导致的阻塞。解决方法:1、提高允许的 max_...原创 2019-06-21 10:18:35 · 338 阅读 · 0 评论 -
MySQL "Too many connections" 问题解决方案、查看最大连接数和修改最大连接数
1、查看最大连接数mysql> show variables like “%max_connections%”;±----------------±------+| Variable_name | Value |±----------------±------+| max_connections | 5000 |±----------------±------+1 row...原创 2019-05-30 15:07:30 · 11140 阅读 · 0 评论