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)
目录
相关文章
|
6月前
|
SQL 数据库 索引
gorm普通的增删改查
gorm普通的增删改查
64 0
|
6月前
|
数据库
gorm 事务的使用
gorm 事务的使用
125 0
|
5月前
|
SQL 关系型数据库 MySQL
Mysql的增、删、查、改
Mysql的增、删、查、改
27 0
|
6月前
|
SQL 数据库
GORM—增
GORM—增
51 0
|
6月前
|
SQL 数据库
GORM—查
GORM—查
61 0
|
6月前
|
SQL
GORM—改
GORM—改
37 0
|
关系型数据库 MySQL 数据库
GORM V2 读操作
GORM V2 读操作
44 1
|
SQL 安全 数据库
GORM V2 写操作
GORM V2 写操作
52 0
|
SQL
GORM中使用事务
GORM中使用事务
133 0
|
SQL 关系型数据库 MySQL
MySQL中的DML操作(增、删、改)
MySQL中数据的DML操作(增、删、改) 1. 新增(INSERT) INSERT INTO 表名 (列1,列2,列3...) VALUES(值1,值2,值3.....) #新增一条数据 INSERT INTO t_countries(COUNTRY_ID,COUNTRY_NAME) VALUES ('CH','中国'); #增加两条数据 #多行添加,在值列表外边追加,再写一个值列表 INS...
103 0