为什么我不能使用.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
的用户存在于数据库
答案 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()
}