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()
}

 

  

posted @ 2022-03-10 16:09  昌慶  阅读(117)  评论(0编辑  收藏  举报