Debian 中 Go 语言如何与数据库交互

本文用 Debian 环境为例,梳理 Go 连接数据库的基本流程:安装 Go、配置环境变量、按数据库类型安装驱动、编写 `database/sql` 示例并运行验证。文中保留了 MySQL、PostgreSQL、SQLite 的驱动命令和一段可直接参考的查询代码,适合快速搭建本地实验环境。

Debian 中 Go 语言如何与数据库交互

SQL 中 GROUP BY 查询很慢,应该如何排查

GROUP BY 查询变慢,常见根因不是数据量大,而是执行计划没走上正确的索引路径。排查时先看 EXPLAIN 的 Extra 列,再结合联合索引顺序、覆盖情况、类型转换和 DISTINCT 替代场景逐项定位。 遇到 GROUP BY 查询变慢时,很多优化都停留在“补个索引试试”这一层,结果往往不稳定。

SQL 中 GROUP BY 查询很慢,应该如何排查

SQL JOIN 如何让 NULL 值参与关联

SQL JOIN 默认不会把两边都是 NULL 的记录关联起来,因为 `NULL = NULL` 的结果是 `UNKNOWN`,而 JOIN 条件只接受 `TRUE`。本文从 SQL 三值逻辑讲清原因,再给出通用写法、数据库专用语法和应避免的替代方案。 在写 SQL JOIN 时,最容易让人误判的一类问题,就是两边字段明明都为 NULL ,结果却没有关联成功。

SQL JOIN 如何让 NULL 值参与关联

SQL 子查询如何防止 SQL 注入风险

子查询并不会天然带来 SQL 注入,风险点始终是把用户输入直接拼进 SQL 字符串。判断是否安全的关键只有两条:结构化动态内容做白名单校验,所有用户可控的值一律参数化绑定,而且要覆盖到最内层子查询。

SQL 子查询如何防止 SQL 注入风险

SQL 存储过程如何使用输出参数返回多个统计值

在 SQL Server 里,存储过程的 OUTPUT 参数一次只能回写一个标量值。要返回多个统计结果,正确做法是为每个值单独声明 OUTPUT 参数;如果结果列数或行数不固定,则应直接返回 SELECT 结果集。本文用订单统计示例梳理定义、调用、读取时最容易踩的点。

SQL 存储过程如何使用输出参数返回多个统计值

SQL 视图为什么查不到最新数据?先别怀疑视图本身

SQL 视图查询不到最新数据,通常不是“视图缓存”导致的,而是事务未提交、误用物化视图、连到延迟从库,或依赖触发器的预计算链路失效。本文按排查顺序拆解这些常见原因,并给出 MySQL、PostgreSQL、SQL Server、Oracle 的关键判断点与命令。

SQL 视图为什么查不到最新数据?先别怀疑视图本身

SQL 高并发插入时如何避免死锁?

高并发插入真正容易触发死锁的,通常不是单纯的 `INSERT`,而是“先查后插”里混用了 `SELECT ... FOR UPDATE`、无索引条件和跨表事务。本文按可直接落地的判断顺序,说明为什么 `INSERT ... ON DUPLICATE KEY UPDATE` 更稳,以及什么情况下才能谨慎使用行锁方案。

SQL 高并发插入时如何避免死锁?

SQL 窗口函数如何发现序列号断档

用 SQL 查序列号断档,核心不是把所有数字生出来逐个比,而是先分清你要找的是“相邻 ID 的物理缺口”还是“业务定义下的合法值缺失”。这篇文章用 LAG()、LEAD() 和反例 ROW_NUMBER() 拆解判断方法,并补上空表、NULL 与跨数据库边界处理。

SQL 窗口函数如何发现序列号断档

如何使用 Entity Framework 防止 SQL 注入

Entity Framework 并不等于“天然免疫 SQL 注入”。LINQ 的 `Where` 查询通常会自动参数化,但一旦写到 `FromSqlRaw`、`ExecuteSqlRaw`,或把表名、字段名、排序条件交给用户输入,风险就会立刻出现。本文按“值参数化”和“结构白名单”两条线,梳理 EF 中真正有效的防注入做法。

如何使用 Entity Framework 防止 SQL 注入