使用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
相关产品推荐
相关产品推荐

