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("OK\n")
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("OK\n")
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
列加了删除的时间