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

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

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

SQL 批量 INSERT 数据时,如何避免主键冲突

批量插入遇到主键或唯一键重复时,核心不是“怎么不报错”,而是按数据库方言选择真正的跳过写法。MySQL、PostgreSQL 和 SQL Server 的语义、锁行为与开销差异很大,用错语句往往会把简单去重变成阻塞和死锁问题。

SQL 批量 INSERT 数据时,如何避免主键冲突

SQL 中聚合函数为什么不能直接嵌套使用?

SQL 里像 `AVG(SUM(x))` 这样的写法不是“括号套错了”,而是标准层面就被禁止。本文从语法限制、语义歧义、子查询与 CTE 的正确改写方式,再到窗口函数边界和平均值口径偏差,梳理为什么会报错,以及怎样写出结果可信的两层聚合查询。

SQL 中聚合函数为什么不能直接嵌套使用?

怎样用 SQL JSON 函数查询数组中的指定元素

查询 SQL JSON 数组时,最常见的问题不是函数失效,而是字段类型、路径表达式和元素类型没对上。本文用 MySQL 与 PostgreSQL 两套写法,梳理 JSON_CONTAINS、JSON_EXTRACT、JSON_TABLE 与 jsonb 操作符的适用场景、坑点和性能差异。 很多人第一次查 SQL 里的 JSON 数组,都会遇到同一个现象:语句看起来没错,结果却始终查不到。

怎样用 SQL JSON 函数查询数组中的指定元素

SQLite 3 如何实现数据不存在才插入?

SQLite 3 不能直接写 `INSERT IF NOT EXISTS`。要实现“数据不存在才插入”,通常只有两条路:基于唯一约束的 `INSERT OR IGNORE`,或用 `INSERT ... SELECT ... WHERE NOT EXISTS` 做显式判断;两者适用场景、性能和坑点都不一样。 在 SQLite 3 里,很多人会下意识写出 INSERT IF NOT EXISTS ,但这条语法本身并不存在。真正要做“防重插”,要么依赖表上的唯一约束配合 INSERT OR IGNORE ,要么改写成带子查询的 INSERT ... SELECT ... WHERE NOT EXISTS 。

SQLite 3 如何实现数据不存在才插入?

如何用 SQL 窗口函数统计连续登录天数?

统计连续登录天数,常见做法是用 `ROW_NUMBER()` 配合日期序数打出连续段分组,再按组聚合得到每段长度,最后取最长值。实际落地时还要处理跨库日期函数、同日重复登录、`LAG()` 的适用边界,以及时区和时间精度带来的误判。

如何用 SQL 窗口函数统计连续登录天数?

Ruby 常见攻击防范指南:从输入验证到会话与 HTTPS 加固

这篇文章围绕 Ruby Web 应用最常见的几类安全风险展开,梳理输入验证、会话与 CSRF、防密码明文、HTTPS 传输以及日志监控等基础做法,并保留 Rails、bcrypt、Nginx 等原始示例,便于直接对照检查项目配置。 Ruby Web 应用的安全问题,往往不是出在框架能力不足,而是出在一些看似基础的细节没有落实,比如直接拼接 SQL、会话配置过松、密码明文存。

Ruby 常见攻击防范指南:从输入验证到会话与 HTTPS 加固

如何使用 SQL WEEK 函数统计每周新增用户

统计“每周新增用户”时,真正容易出错的不是 SQL 语法,而是周定义、首活口径和跨年分组。本文按 MySQL、PostgreSQL、SQL Server 分别说明 ISO 周写法,并给出新增用户统计、跨年周处理与索引优化的实操要点。 很多人写“每周新增用户”统计时,都会直接对时间字段套上 WEEK() ,但这一步很可能已经把结果做偏了。

如何使用 SQL WEEK 函数统计每周新增用户

SQL 触发器中如何正确使用事务锁

在 MySQL 和 SQL Server 里,DML 触发器并不会开启独立事务,而是直接运行在父事务上下文中。要减少死锁和锁等待,关键不在触发器里“补事务”,而在主事务开头预加锁、让触发器内 DML 只走唯一索引,并把非核心跨表操作尽量移出事务边界。

SQL 触发器中如何正确使用事务锁