You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GORM操作SQLite时如何启用并强制执行外键约束

GORM操作SQLite外键约束不生效的解决方法

解决方案

在初始化GORM数据库连接后执行以下语句即可开启外键约束校验:
db.Exec("PRAGMA foreign_keys = ON")
感谢 @outdead 提供该方案

问题场景复现

使用GORM更新SQLite数据库时,会出现外键约束没有被强制执行的情况,具体场景如下:

  • 已定义2个关联模型:
type Cat struct {
    ID      int   
    Name    string
    Breed   string
    OwnerID int  
    Owner   Owner 
}

type Owner struct {
    ID    int   
    Name  string
    Phone string
}
  • 模型已正确生成外键约束,owner_id 关联 owners 表的 id 字段,可在SQLite shell中执行 .schema cats 验证,输出结果如下:
CREATE TABLE `cats` (`id` integer,`name` text,`breed` text,`owner_id` integer,PRIMARY KEY (`id`),CONSTRAINT `fk_cats_owner` FOREIGN KEY (`owner_id`) REFERENCES `owners`(`id`));
  • 手动执行 PRAGMA foreign_keys = ON; 后,在SQLite shell中操作外键约束可正常生效:尝试将 owner_id 更新为 owners 表不存在的 id 时,会返回 Error: FOREIGN KEY constraint failed 报错,符合预期,但通过GORM执行相同更新操作时不会触发该报错。

内容的提问来源于stack exchange,提问作者barjo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:57:01