为了账号安全,请及时绑定邮箱和手机立即绑定

在 GORM SQLite 中强制执行外键约束

在 GORM SQLite 中强制执行外键约束

Go
慕尼黑5688855 2022-10-17 16:05:22
答:db.Exec("PRAGMA foreign_keys = ON")用于强制执行外键约束检查。谢谢@outdead当我使用 GORM 更新我的 SQLite 数据库时,不会强制执行外键约束。我有这两个模型:type Cat struct {    ID      int       Name    string    Breed   string    OwnerID int      Owner   Owner }type Owner struct {    ID    int       Name  string    Phone string}它正确地创建了一个外键约束,其中owner_id引用id. owners这可以通过.schema cats在 SQLite shell 中运行: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 中运行命令时强制执行外键。如果我尝试将 an 更新为中不存在的owner_idan ,我会得到:,这是我想要的行为,但是,GORM 仍然能够执行这些更新而不会收到此错误。idownersError: FOREIGN KEY constraint failed
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

您需要执行查询才能PRAGMA foreign_keys在更新之前打开


if res := db.Exec("PRAGMA foreign_keys = ON", nil); res.Error != nil {

    return res.Error

}


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信