目錄
- Gorm洗掉
- 洗掉記錄
- 批量洗掉
- 軟洗掉
- 物理洗掉
- 不使用軟洗掉
Gorm洗掉
軟洗掉
洗掉記錄
警告 洗掉記錄時,請確保主鍵欄位有值,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);
package main
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
//1. 定義模型
type User struct {
gorm.Model
Name string
Age byte
Active bool
}
func main() {
//2. 連接Mysql資料庫
db, err := gorm.Open("mysql","root:123456@tcp(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
//3. 把模型與資料庫中的表對應起來
db.AutoMigrate(&User{})
//4. 洗掉
var u User
u.ID = 1
db.Debug().Delete(u)
//[2020-04-27 16:35:12] [20.97ms] UPDATE `users` SET `deleted_at`='2020-04-27 16:35:12' WHERE `users`.`deleted_at` IS NULL AND `users`.`id` = 1
//[1 rows affected or returned ]
}

func main() {
//2. 連接Mysql資料庫
db, err := gorm.Open("mysql","root:123456@tcp(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
//3. 把模型與資料庫中的表對應起來
db.AutoMigrate(&User{})
//4. 洗掉
var u User
u.Name = "yike"
db.Debug().Delete(u)
//[2020-04-27 16:38:07] [20.97ms] UPDATE `users` SET `deleted_at`='2020-04-27 16:38:07' WHERE `users`.`deleted_at` IS NULL
//[1 rows affected or returned ]
}

批量洗掉

洗掉全部匹配的記錄
db.Where("email LIKE ?", "%jinzhu%").Delete(Email{})
//// DELETE from emails where email LIKE "%jinzhu%";
db.Delete(Email{}, "email LIKE ?", "%jinzhu%")
//// DELETE from emails where email LIKE "%jinzhu%";
////4. 洗掉
//var u User
//u.Name = "yike"
//db.Debug().Delete(u)
db.Debug().Where("name=?","zisefeizhu").Delete(User{})
//db.Debug().Delete("age = ?", 21)

軟洗掉
如果一個 model 有 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;
var u1 []User
db.Debug().Unscoped().Where("name = ?","yike").Find(&u1)
//[2020-04-27 16:49:05] [21.96ms] SELECT * FROM `users` WHERE (name = 'yike')
//[1 rows affected or returned ]
物理洗掉
//物理洗掉
//db.Debug().Unscoped().Where("name = ?", "zisefeizhu").Delete(&User{})
db.Debug().Unscoped().Where("name = ?", "yike").Delete(&User{})

不使用軟洗掉
package main
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
//1. 定義模型
type User struct {
//gorm.Model
ID int
Name string
Age byte
Active bool
}
func main() {
//2. 連接Mysql資料庫
db, err := gorm.Open("mysql","root:123456@tcp(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
//3. 把模型與資料庫中的表對應起來
db.AutoMigrate(&User{})
////創建記錄
u1 := User{Name:"zisefeizhu", Age: 22, Active: true}
db.Create(&u1)
u2 := User{Name:" jingxing", Age: 21, Active:false}
db.Create(&u2)
}

package main
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
//1. 定義模型
type User struct {
//gorm.Model
ID int
Name string
Age byte
Active bool
}
func main() {
//2. 連接Mysql數據庫
db, err := gorm.Open("mysql","root:123456@tcp(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
defer db.Close()
//3. 把模型與資料庫中的表對應起來
db.AutoMigrate(&User{})
//洗掉
db.Debug().Where("name=?","zisefeizhu").Delete(User{})
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17377.html
標籤:Go
上一篇:gorm系列-更新
下一篇:golang的命令列程式開發
