删除不起作用

时间:2018-01-19 01:57:02

标签: mysql go go-gorm

为什么我不能使用.Delete()从mysql数据库中删除记录?

以下是一个例子:

tx := db.Begin()
if err := tx.Delete(&User{}, id).Error; err != nil {
  fmt.Print(err)
  tx.Rollback()
} else {
  fmt.Print("Rows affected: %d", tx.RowsAffected) // Always returns 0
  tx.Commit()
}

使用tx.First(&user, id)正常工作并正确返回用户

我试过了:
tx.Unscoped().Delete(...)也没有工作 tx.Exec("delete from users where (id = ?)", id) RowsAffected = 0
tx.First(&user, id); tx.Delete(&user)无法正常工作

P.S。标识为id的用户存在于数据库

4 个答案:

答案 0 :(得分:1)

当我升级到v1.9.x时,DELETE()无效。我回滚到v1.0,它工作正常。

打开DB Log后,我发现了它的gorm v1.9新功能:自动创建/更新

参考文献:http://gorm.io/docs/associations.html#Auto-Create-Update

因此,如果您在删除内容后更新字段,它会将数据插回数据库。

尝试跳过这样的自动创建/更新。

db.Set("gorm:association_autoupdate", false).Set("gorm:association_autocreate", false).Create(&user)

答案 1 :(得分:0)

//首先查找用于删除用户的记录和结构:

 tx := db.Begin()

  // Read
  var user User
  tx.First(&user, id) // find product with id 1

  // Delete - delete user
  //tx.Delete(&user)

if err := tx.Delete(&user).Error; err != nil {
  fmt.Print(err)
  tx.Rollback()
} else {
  fmt.Print("Rows affected: %d", tx.RowsAffected) // Always returns 0
  tx.Commit()
}

答案 2 :(得分:0)

我认为您必须使用db.Unscoped().delete()

答案 3 :(得分:0)

试试这个:

tx := db.Begin()
delTx := tx.Delete(&User{}, id)
if err := delTx.Error; err != nil {
  fmt.Print(err)
  tx.Rollback()
} else {
  fmt.Print("Rows affected: %d", delTx.RowsAffected)
  tx.Commit()
}