MySQL

分类下相关文章

员工花名册 Excel 表格批量导入公司人事管理系统

公司人事管理系统开发完成之后,就需要导入初始数据。例如,员工花名册。 人事部门手头有一个 Excel 表格,包含了所有员工的基本信息,包括姓名、工号、部门、职位等。 当然,主要目的是将既有员工的员工编号录入系统,后续新入职的则会自动按照规则生成员工编号。 而我又承担了这枯燥繁琐的工作任务😅 之前发过一篇笔记,讨论员工编号的生成规则,大家讨论得还挺热烈,参见前文 人事管理系统开发之三,员工编号号批量生成 🍎 花名册导入方案 方案一:自动将 Excel 转换成 SQL 插入语句,直接导入。这个方案,不太行,因为涉及到子公司和部门的关系,简单的插入语句无法处理这些复杂的逻辑。 方案二:编写一个数据 ...

阅读全文...

Excel 与 CSV 文件格式的区别,哪个更适合数据库批量导出

平时经常要从数据库中导出大量数据,以便在 Excel 或者 WPS 表格中进行分析和处理。 之前一直是用 Excel 格式导出数据,最近尝试用 CSV 格式导出,发现稍微复杂一点的数据,CSV 格式就会出现各种问题 😅。 所以最后放弃使用 mysqldump 直接导出 CSV 文件,还是用 golang 代码生成 Excel 文件,虽然代码复杂了一点,但是导出的数据在 Excel 或 WPS 表格中打开时,没有任何问题。这里记录一下两种文件格式的区别: CSV 是什么? CSV(Comma-Separated Values,逗号分隔的数据)是一种简单的文本文件格式,用于存储表格数据。每一行代表 ...

阅读全文...

MySQL 指定表导出 CSV

需要将 MySQL 数据库中的某个表,导出成 CSV 文件格式。方便在 Excel 中查看和修改,然后再导入回数据库。 突然感觉智能表格才是应用的未来。。。因为大家还是习惯在 Excel 中查看和修改数据。 尝试了几种方法,最终发现还是 mysqldump 命令最方便。 mysqldump 导出 CSV 文件 sudo mysqldump -u username -p \ --tab=/var/lib/mysql-files/ \ --fields-terminated-by=',' \ --fields-enclosed-by='"' \ db_name table ...

阅读全文...

gobackup 自动将 MySQL 数据库备份到七牛云私有空间之二,线上部署

继续前文 使用 gobackup 自动将 MySQL 数据库备份到七牛云私有空间,在本地测试了 gobackup 的基本功能之后,今天在几台线上服务器,包括阿里云和腾讯云的各种服务器,依次部署了 gobackup 备份服务。这里记录一下一些踩坑的地方。 消息通知设置 用 163 邮箱设置了邮件通知,测试失败日志如下: 2025/10/27 09:32:58 [Notifier] Running 1 Notifiers 2025/10/27 09:33:18 [Notifier] EOF 从 github issue 看,似乎是不支持 TLS: When send mail via port ...

阅读全文...

使用 gobackup 自动将 MySQL 数据库备份到七牛云私有空间

现在后台开发和运维都是我一个人,所以服务器上的 MySQL 数据库备份也只能自己来做了。 由于服务分散在多台服务器上,并且有几十个数据库需要备份,手动备份实在是太麻烦了。 需要一套自动化的备份流程。定时将数据库导出,并存储到云存储空间中,例如七牛云存储或者阿里云 OSS 上。 备份方案的选择 我昨天纠结了半天,到底用什么方案或者工具来做数据库的自动备份: 手写 shell 脚本。这个很麻烦,因为数据库太多,不同服务对应的云存储还不一样。逻辑复杂,不适合用 shell 脚本来写。 Python 脚本。本来是都开始动手要写了,但是登录了一台服务器,发现居然是 Ubuntu 18.04 系统,Py ...

阅读全文...

清理线上系统的测试数据,使用 truncate 还是 delete

有个开发了一个多月的大赛报名系统终于要上线了。上线前有一项重要的任务就是清理 MySQL 数据库中的测试数据。 简单粗暴的所有表都 truncate 一遍是不行的。因为还有一些是配置项表,和数据字典表,清空了就白忙活了。所以,需要记录哪些表是可以清理的,哪些是不行。 😅 使用 truncate 还是 delete 清理前,还有一个重要的概念。就是究竟是用 truncate 还是 delete 来清理数据表。 印象中,好多年前遇到过这个问题,还被 truncate 坑过一次。因为如果部分表用 truncate,而关联表不用的话,会导致数据错乱。原因是 truncate 会导致主键自增 ID 重置 ...

阅读全文...

设置 MySQL binlog 保存天数,节省服务器硬盘空间

周五总是充满了意外,先是一个还没经过完全测试的大赛系统被甲方抢先上线,吓个半死; 然后发现一台服务器的上磁盘空间满了。。。😱 为了快速清理磁盘空间,顺序清理了: Nginx 日志 Web 框架日志 系统日志 但是也只能勉强清理出来不到 5G。 然后 使用 ncdu 命令分析 linux 磁盘空间占用 意外的发现 MySQL 目录下的 binlog 占用了近 100G。 之前一天大概 1~2G 的日志,但是这个周飙到了每天 7~8G 。。。 紧急清理 可以通过 MySQL console 中,使用 SQL 清理某个编号之前的 binlog 日志文件: 例如,清理 100 编号前的 binlo ...

阅读全文...

MySQL 对中文进行拼音排序

我想将 MySQL 返回的中文数据按照拼音进行排序并返回,例如,省份列表: Order("CONVERT(province USING gbk) COLLATE gbk_chinese_ci") 这是 golang gorm 的写法。 但是会有一个问题,就是对于多音字的处理。看一下返回: "安徽省", "北京市", "福建省", "甘肃省", "广东省", "广西壮族自治区", "贵州省& ...

阅读全文...

Github Copilot Chat 初试,通过 SQL 导入 CSV 文件到 MySQL 数据表

我想将一个 Excel 中的数据导入到 MySQL 数据表,首先,将 Excel 转成了 CSV 文件。 但是不知道为啥,MySQL Workbench 的 Table Data Import Wizard 选中 CSV 文件之后就崩溃。 于是我想为何不用 Github Copilot 生成 SQL 来处理呢?正好试试 Chat 功能。 非常 nb,稍微修改一下就能直接使用。你可能会觉得,这跟直接向 chatgpt,或者豆包之类的 AI 问问题,得到答案没有什么不同啊?但是,copilot 加入了文件 context 之后,就能精准的把字段都识别出来了,省去了手工输入字段的麻烦。 Copil ...

阅读全文...

MySQL 8 之后版本的默认字符集已经变成了 utf8mb4

昨天在翻一本 MySQL 书籍的时候,发现 MySQL 8.0 之后,默认的数据库字符集已经变成了 utf8mb4。 而我这么多年一直还是习惯性的新建数据库时,手动指定 utf8mb4 字符集和 collation 。。。看来以后可以省去这个多余的操作了。 The default MySQL server character set and collation are utf8mb4 and utf8mb4_0900_ai_ci, but you can specify character sets at the server, database, table, column, and st ...

阅读全文...

SQL 统计过去 12 个月内,按月统计记录条数,基于 created_at 字段

例如,我想统计过去一年内,每个月发布的博客数量。 即,查询 MySQL 表中过去 12 个月内,按月统计记录条数,基于 created_at 字段。 MySQL SQL 语句 SELECT YEAR(created_at) AS year, MONTH(created_at) AS month, COUNT(*) AS count FROM article WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 12 MONTH) GROUP BY YEAR(created_at), MON ...

阅读全文...

MySQL 某个字段排序,按照指定值的顺序

没想到这么多年还是要继续写微信小程序会员卡开卡、扣卡这种逻辑,又是脑子炸裂的一天。 排序需求 会员卡使用状态字段,在数据库中的对应值如下 Status int // 卡状态。0 待使用; 1 已使用; 2 使用完; 3 已退卡; 4 退卡中 如果想按照如下顺序排序: 待使用 已使用 退卡中 使用完 已退卡 那么就不能直接使用 order by status asc 这种的方式。 指定值排序 解决方法是使用 SELECT * FROM user_card ORDER BY FIELD(status, 0, 1, 4, 2, 3) 注意: 如果字段包含的值不在指定的值列表中,则该字段的值 ...

阅读全文...

MySQL 查询日期类型字段在某个月的数据

在做的一个财务预算管理小程序部门支出流水功能,需要能查询出指定月份的财务流水数据。 MySQL 数据库中存储了财务支出条目发生的日期,需要能通过年月来过滤查询。 例如,我要查询 2022 年 3 月份的所有财务数据。 方法一(推荐) SELECT * FROM financial_history WHERE `date` BETWEEN '2022-03-01' AND LAST_DAY('2022-03-01') MySQL LAST_DAY 函数返回当前 date 或 datetime 类型值对应月份的最后一天。 MySQL LAST_DAY() returns the last d ...

阅读全文...

ERROR 1170 (42000): BLOB/TEXT column 'title' used in key specification without a key length

今天在 MySQL 中建表时,报错 ERROR 1170 (42000): BLOB/TEXT column 'title' used in key specification without a key length 从错误信息字面上看,是 text 类型作为唯一索引时,必须指定长度。 出错的建表 SQL CREATE TABLE `question` ( `id` INT NOT NULL AUTO_INCREMENT, `title` TEXT NULL, `answers` VARCHAR(255) NULL, `created_at` DATETIME NULL ...

阅读全文...

MySQL 一键导出全部数据表的建表 SQL 语句

在开发时,经常要将最新的 MySQL 建表语句保存到 Git 项目中作为备份。 以方便在新的开发环境快速搭建数据库环境。 一张一张表复制黏贴太慢了,有没有一次导出全部建表语句的方法? 导出方法 MySQL Workbench 客户端,同时选中多个数据表,右键 - Copy to clipboard - Create Statement. 即可复制到剪切板,再黏贴到一个本地文件中即可。 ...

阅读全文...