删除模型数据一般用于删除之前查询出来的模型变量绑定的记录。删除只有一个操作,delete,也是先找到再去删除。 可以删除单条记录,也可以删除多条记录。
单纯delete语句进行删除
Gorm 删除数据的语法:
db.Delete(模型变量)
var s Student
db.Debug().Delete(&s, "age = ?", 100)
fmt.Println(s)
[15.878ms] [rows:1] DELETE FROM `student` WHERE age = 100
var s Student
db.Debug().Take(&s, "age = ?", 101)
db.Debug().Delete(&s)
[2.060ms] [rows:1] SELECT * FROM `student` WHERE age = 101 LIMIT 1
[4.494ms] [rows:1] DELETE FROM `student` WHERE `student`.`id` = 1
Gorm 删除数据的范例:
food := Food{}
// 先查询一条记录, 保存在模型变量 food
// 等价于: SELECT * FROM `foods` WHERE (id = '2') LIMIT 1
db.Where("id = ?", 2).Take(&food)
// 删除 food 对应的记录,通过主键 Id 标识记录
// 等价于: DELETE from `foods` where id=2;
db.Delete(&food)
批量删除
删除所有匹配记录
db.Where("email LIKE ?", "%jinzhu%").Delete(Email{})
DELETE from emails where email LIKE "%jinhu%";
db.Delete(Email{}, "email LIKE ?", "%jinzhu%")
DELETE from emails where email LIKE "%jinhu%";
delete + Where 条件删除数据
Gorm 条件删除数据的语法:
db.Where(条件表达式).Delete(空模型变量指针)
Gorm 条件删除数据的范例:
// 等价于:DELETE from `foods` where (`type` = 5);
db.Where("type = ?", 5).Delete(&Food{})
提示:这里Delete函数需要传递一个空的模型变量指针,主要用于获取模型变量绑定的表名, 不能传递一个非空的模型变量。
删除
警告:删除记录时,需要确保其主要字段具有值,GORM将使用主键删除记录,如果主要字段为空,GORM将删除模型的所有记录
// 删除存在的记录
db.Delete(&email)
DELETE from emails where id=10;
// 为Delete语句添加额外的SQL选项
db.Set("gorm:delete_option", "OPTION (OPTIMIZE FOR UNKNOWN)").Delete(&email)
DELETE from emails where id=10 OPTION (OPTIMIZE FOR UNKNOWN);