GORM—删

简介: GORM—删

如果有DeletedAt *time.Time sql:"index",其实是软删除

删除记录

删除记录时,请确保主键字段有值,GORM 会通过主键去删除记录,如果主键为空,GORM 会删除该 model 的所有记录。

  // 删除现有记录
  db.Delete(&email)
  // DELETE from emails where id=10;
  // 为删除 SQL 添加额外的 SQL 操作
  db.Set("gorm:delete_option", "OPTION (OPTIMIZE FOR UNKNOWN)").Delete(&email)
  // DELETE from emails where id=10 OPTION (OPTIMIZE FOR UNKNOWN);

批量删除

删除全部匹配的记录

  // DELETE from emails where email LIKE "%wxf%";
  db.Where("email LIKE ?", "%wxf%").Delete(Email{})
  // DELETE from emails where email LIKE "%wxf%";
  db.Delete(Email{}, "email LIKE ?", "%wxf%")

软删除

如果一个 model 有 DeletedAt 字段,他将自动获得软删除的功能! 当调用 Delete 方法时, 记录不会真正的从数据库中被删除, 只会将DeletedAt 字段的值会被设置为当前时间

  // UPDATE users SET deleted_at="2013-10-29 10:23" WHERE id = 111;
  db.Delete(&user)
  // 批量删除
  // UPDATE users SET deleted_at="2013-10-29 10:23" WHERE age = 20;
  db.Where("age = ?", 20).Delete(&User{})
  // 查询记录时会忽略被软删除的记录
  // SELECT * FROM users WHERE age = 20 AND deleted_at IS NULL;
  db.Where("age = 20").Find(&user)
  // Unscoped 方法可以查询被软删除的记录
  // SELECT * FROM users WHERE age = 20;
  db.Unscoped().Where("age = 20").Find(&users)

物理删除

  // Unscoped 方法可以物理删除记录
  // DELETE FROM orders WHERE id=10;
  db.Unscoped().Delete(&order)
  // DELETE FROM orders WHERE id=10 and age = 20;
  db.Unscoped().Where("age = 20").Delete(&order)
目录
相关文章
|
7月前
|
SQL 数据库 索引
gorm普通的增删改查
gorm普通的增删改查
68 0
|
6月前
|
SQL 关系型数据库 MySQL
Mysql的增、删、查、改
Mysql的增、删、查、改
31 0
|
7月前
|
SQL 数据库
GORM—增
GORM—增
57 0
|
7月前
|
SQL 数据库
GORM—查
GORM—查
66 0
|
7月前
|
SQL
GORM—改
GORM—改
39 0
|
关系型数据库 MySQL 数据库
GORM V2 读操作
GORM V2 读操作
50 1
|
SQL 安全 数据库
GORM V2 写操作
GORM V2 写操作
61 0
|
Go
GORM v2 一对一关联查询使用(Belongs To 、Has One)
GORM v2 一对一关联查询使用(Belongs To 、Has One)
436 0
GORM v2 一对一关联查询使用(Belongs To 、Has One)
|
SQL
gorm批量插入解决方案
gorm批量插入解决方案
1075 0
gorm批量插入解决方案
|
安全 关系型数据库 MySQL
mysql数据库的增、删、改、查
mysql数据库的增、删、改、查
129 0
mysql数据库的增、删、改、查