SQLite INSERT OR IGNORE:非法记录被跳过,为什么外键错误仍会中断 把INSERT改成INSERT OR IGNORE以后,重复键、不合格数量和缺失字段似乎都被安静跳过,于是有人把它当成“尽量导入,遇到什么都继续”。一旦出现外键错误,这个预期就会失效,而且同一条多行INSERT里较早... yunqueblog/ 技术教程/ 2026-10-03/ 4 阅读
SQLite 复合外键:其中一列为空,为什么剩下一列不再检查匹配 一条记录用租户和编号共同指向父表,租户写成不存在的值,编号却为空,插入竟然成功。若只检查PRAGMA foreign_keys已经打开,很容易把它当成SQLite漏验。真正原因是复合外键对NULL有明确规则:任意一个... yunqueblog/ 技术教程/ 2026-10-03/ 4 阅读
SQLite ON DELETE SET DEFAULT:默认值已经设置,为什么删除父记录仍失败 把某个负责人删除后,资产自动转入“未分配”类别,是很自然的表设计。于是给子表外键写DEFAULT 0,再添加ON DELETE SET DEFAULT。真正删除时却报外键错误,容易让人怀疑动作没有执行。事实上,设置默... yunqueblog/ 技术教程/ 2026-10-03/ 4 阅读
Python sqlite3 executemany:生成器中途报错,前两行为什么仍然被提交 导入任务只调用了一次executemany,输入生成器却在第三项之前报错。调用者记录了错误,随后发现前两行已经提交。关键不在于数据库忽略了异常,而在于executemany会逐项消费参数并重复执行语句,输入失败时前面... yunqueblog/ 技术教程/ 2026-10-03/ 4 阅读
MinHash为什么要共用随机顺序:两个集合各自洗牌,碰撞率就变了 给两份文档建立短指纹时,一个常见直觉是“各随机抽一个词,相同就算一次匹配”。MinHash确实会留下一个代表元素,但它依靠的是所有集合共用同一份随机全序,而不是各自独立抽样。少了这个共享条件,得到的碰撞概率就不再是原... yunqueblog/ AI分享/ 2026-10-03/ 4 阅读
随机超平面LSH:六成多的同位率,为什么不等于余弦相似度 两条向量经过同一组随机平面,只保存每个平面两侧的符号,便得到紧凑的二进制指纹。随后比较多少位相同,看起来像在计算余弦相似度。这里恰好有一个重要细节:同位率对应的是角度的线性函数,而余弦是角度的非线性函数。把两者混用,... yunqueblog/ AI分享/ 2026-10-03/ 4 阅读
随机投影保住的是哪种距离:平均正确,单次仍可能把两点压成同一点 把向量从几千维压到几百维时,人们常用“随机投影大致保距离”解释其作用。但这句话漏掉了三个问题:保的是距离还是平方距离,是固定两点还是整份数据,以及保证来自平均还是高概率。一个二维到一维的小例,足以让这三个层次分开。 yunqueblog/ AI分享/ 2026-10-03/ 4 阅读
Hutchinson迹估计:两次探针读数都不准,平均为何仍有明确目标 大型模型的曲率分析经常遇到这样的接口:可以计算矩阵乘上一条向量,却无法把整张矩阵存下来。此时想知道对角线之和,逐列查询虽然可行,成本却可能很高。Hutchinson估计把问题换成若干随机探针的二次型平均。理解它的关键... yunqueblog/ AI分享/ 2026-10-03/ 4 阅读
GNU xargs 空输入:什么也没读到,为什么命令仍运行了一次 批处理脚本筛出零个任务后,下游命令却仍运行了一次,是一种特别隐蔽的空批次问题。某些程序在没有位置参数时会读取标准输入、采用默认目录,甚至执行与有参数时不同的动作。GNU xargs默认允许一次没有新增参数的调用,因此... yunqueblog/ 技术教程/ 2026-10-03/ 4 阅读
GNU tr 删除后再压缩:-d 与 -s 同时启用时,两组字符各管什么 清理设备输出时,常见需求是删掉某种分隔符,再把重复字符压成一个。tr -ds看上去只是两个简单开关,但处理顺序会改变最终结果:删除动作可能让原本分开的字符成为相邻一段,而挤压随后会把这段一起缩短。若把同样两个步骤反过... yunqueblog/ 技术教程/ 2026-10-03/ 4 阅读