连接数据库
var db *gorm.DB
func init() {
dsn := "root:root@tcp(127.0.0.1:3306)/go_orm?charset=utf8mb4&parseTime=True&loc=Local"
d, err := gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: logger.Default.LogMode(logger.Info)})
if err != nil {
log.Fatal(err)
}
db = d
}
删除一条记录
func delete1() {
var user User
db.First(&user)
// SELECT * FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT 1
fmt.Printf("user: %v\n", user)
// user: {{1 2022-03-09 15:30:06.188 +0800 CST 2022-03-10 17:19:26.017 +0800 CST {0001-01-01 00:00:00 +0000 UTC false}} new_name 0 2022-03-09 15:30:06.187 +0800 CST false}
d := db.Delete(&user)
// UPDATE `users` SET `deleted_at`='2022-03-12 15:38:45.361' WHERE `users`.`id` = 1 AND `users`.`deleted_at` IS NULL
fmt.Printf("d.RowsAffected: %v\n", d.RowsAffected)
// d.RowsAffected: 1
}
带额外条件的删除
func delete2() {
var user User
db.First(&user)
// SELECT * FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT 1
fmt.Printf("user: %v\n", user)
// user: {{2 2022-03-09 15:33:25.816 +0800 CST 2022-03-09 15:33:25.816 +0800 CST {0001-01-01 00:00:00 +0000 UTC false}} www 19 0001-01-01 00:00:00 +0000 UTC false}
d := db.Where("name = ?", "www").Delete(&user)
// UPDATE `users` SET `deleted_at`='2022-03-12 15:44:29.053' WHERE name = 'www' AND `users`.`id` = 2 AND `users`.`deleted_at` IS NULL
fmt.Printf("d.RowsAffected: %v\n", d.RowsAffected)
// d.RowsAffected: 1
}
delete hook
func delete3() {
var user User
db.First(&user)
// SELECT * FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT 1
fmt.Printf("user: %v\n", user)
// {{3 2022-03-09 15:37:03.607 +0800 CST 2022-03-09 15:37:03.607 +0800 CST {0001-01-01 00:00:00 +0000 UTC false}} 1 0 0001-01-01 00:00:00 +0000 UTC false}
d := db.Delete(&user)
// UPDATE `users` SET `deleted_at`='2022-03-12 15:47:35.748' WHERE `users`.`id` = 3 AND `users`.`deleted_at` IS NULL
fmt.Printf("d.RowsAffected: %v\n", d.RowsAffected)
// d.RowsAffected: 1
}
func (u *User) BeforeDelete(tx *gorm.DB) (err error) {
fmt.Println("delete before...")
return
}
批量删除
func delete4() {
d := db.Where("name like ?", "%ello%").Delete(&User{})
// UPDATE `users` SET `deleted_at`='2022-03-12 15:50:59.534' WHERE name like '%ello%' AND `users`.`deleted_at` IS NULL
fmt.Printf("d.RowsAffected: %v\n", d.RowsAffected)
// d.RowsAffected: 3
}
阻止全局删除
func delete5() {
err := db.Delete(&User{}).Error
// UPDATE `users` SET `deleted_at`='2022-03-12 15:53:30.742' WHERE `users`.`deleted_at` IS NULL
fmt.Printf("err: %v\n", err)
// err: WHERE conditions required
}
查询被软删除的记录
func delete6() {
var users []User
db.Unscoped().Find(&users)
for _, v := range users {
fmt.Printf("v: %v\n", v)
}
}
永久删除(不建议)
func delete7() {
var user User
db.First(&user)
// SELECT * FROM `users` WHERE `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT 1
fmt.Printf("user: %v\n", user)
// user: {{4 2022-03-09 15:37:03.607 +0800 CST 2022-03-09 15:37:03.607 +0800 CST {0001-01-01 00:00:00 +0000 UTC false}} 2 0 0001-01-01 00:00:00 +0000 UTC false}
db.Unscoped().Delete(&user)
// DELETE FROM `users` WHERE `users`.`id` = 4
}