1. 删除记录2. 批量删除3. 软删除
1. 删除记录db.Delete(&xiShu{ID: 2})
完整示例
删除id=2 的一行
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
type xiShu struct {
ID int64
Name string
Age int64
}
func(xiShu) TableName() string {
return "xi_shu"
}
func main() {
db,_ := connect()
defer db.Close()
result := db.Delete(&xiShu{ID: 2})
fmt.Println(result.Value)
}
func connect() (db *gorm.DB,err error) {
db, err = gorm.Open("mysql", "root:40010355@tcp(127.0.0.1:3306)/crow?charset=utf8&parseTime=True&loc=Local")
if err != nil {
fmt.Printf(err.Error())
defer db.Close()
}else {
fmt.Printf("OKn")
db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100)
}
return
}
2. 批量删除
db.Where("name LIKE ?", "%Guan%").Delete(&xiShu{})
或写作
db.Delete(xiShu{},"name LIKE ?","%Guan%")
示例
表中原有数据
mysql> select * from xi_shu ; +----+------------+------+ | id | name | age | +----+------------+------+ | 1 | LiuBei | 28 | | 2 | GuanYu | 22 | | 3 | ZhangFei | 20 | | 4 | ZhaoYun | 18 | | 5 | ZhuGeLiang | 20 | | 6 | GuanPing | 3 | +----+------------+------+ 6 rows in set (0.00 sec)
代码
上例main函数修改如下:
func main() {
db,_ := connect()
defer db.Close()
result := db.Where("name LIKE ?", "%Guan%").Delete(&xiShu{}).RowsAffected
fmt.Println(result)
}
表修改后
mysql> select * from xi_shu ; +----+------------+------+ | id | name | age | +----+------------+------+ | 1 | LiuBei | 28 | | 3 | ZhangFei | 20 | | 4 | ZhaoYun | 18 | | 5 | ZhuGeLiang | 20 | +----+------------+------+ 4 rows in set (0.00 sec)
3. 软删除如上,关家将都被删除
实际是给deleted_at列加了一个删除时间deleted_at列必须存在,否则直接删除
db.Delete(&xiShu{ID: 2})
示例
package main
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
"time"
)
type xiShu struct {
ID int64
Name string
Age int64
DeletedAt time.Time
}
func(xiShu) TableName() string {
return "xi_shu"
}
func main() {
db,_ := connect()
defer db.Close()
result := db.Delete(&xiShu{ID: 2}).RowsAffected
fmt.Println(result)
}
func connect() (db *gorm.DB,err error) {
db, err = gorm.Open("mysql", "root:40010355@tcp(127.0.0.1:3306)/crow?charset=utf8&parseTime=True&loc=Local")
if err != nil {
fmt.Printf(err.Error())
defer db.Close()
}else {
fmt.Printf("OKn")
db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100)
}
return
}
执行后表格
mysql> select * from xi_shu ; +----+----------+------+---------------------+ | id | name | age | deleted_at | +----+----------+------+---------------------+ | 1 | LiuBei | 28 | NULL | | 2 | GuanYu | 22 | 2022-02-10 14:39:56 | | 3 | ZhangFei | 20 | NULL | +----+----------+------+---------------------+ 3 rows in set (0.00 sec)
如上可见,第二行没有被真正删除,只是在deleted_at列加了删除的时间



