## 删除/软删除 **警告**删除记录时,需要确保其主要字段具有值,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); ~~~ ### 1. 批量删除 删除所有匹配记录 ~~~ 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%"; ~~~ ### 2. 软删除 如果模型有`DeletedAt`字段,它将自动获得软删除功能! 那么在调用`Delete`时不会从数据库中永久删除,而是只将字段`DeletedAt`的值设置为当前时间。 ~~~ db.Delete(&user) //// UPDATE users SET deleted_at="2013-10-29 10:23" WHERE id = 111; // 批量删除 db.Where("age = ?", 20).Delete(&User{}) //// UPDATE users SET deleted_at="2013-10-29 10:23" WHERE age = 20; // 软删除的记录将在查询时被忽略 db.Where("age = 20").Find(&user) //// SELECT * FROM users WHERE age = 20 AND deleted_at IS NULL; // 使用Unscoped查找软删除的记录 db.Unscoped().Where("age = 20").Find(&users) //// SELECT * FROM users WHERE age = 20; // 使用Unscoped永久删除记录 db.Unscoped().Delete(&order) //// DELETE FROM orders WHERE id=10; ~~~