golang 批量查询再删除
本次主要是解决大批量的删除数据报数据库连接被远程拒绝问题,更好的方式是把切片换成管道,但我没有试验成功,这里依旧使用切片来处理
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
type ConnectDB struct {
Dsn string
Db *sql.DB
IdList []string
}
type UserStudyRelDuration struct {
Id sql.NullString `json:"id"`
}
func (db *ConnectDB) queryUserRelId() {
rows, err := db.Db.Query("SELECT id FROM user_info WHERE time < \"2022-01-31\"")
if err != nil {
fmt.Println(err)
}
defer rows.Close()
u := UserStudyRelDuration{}
for rows.Next() {
if err := rows.Scan(&u.Id); err != nil {
fmt.Println(err)
}
db.IdList = append(db.IdList, u.Id.String)
}
}
func (db *ConnectDB) deleteData() {
for _, id := range db.IdList {
fmt.Println(id)
if _, err := db.Db.Exec("DELETE FROM user_info WHERE id=?", id); err != nil {
fmt.Println(err)
}
}
}
func main() {
var err error
db := ConnectDB{
Dsn: "root:123456@(127.0.0.1:3306)/?charset=utf8mb4&parseTime=True&loc=Local",
}
db.Db, err = sql.Open("mysql", db.Dsn)
if err != nil {
fmt.Println("Open db filed: ", err)
}
defer db.Db.Close()
db.queryUserRelId()
db.deleteData()
}

浙公网安备 33010602011771号