日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 检查哪些项目_mysql根据内容查询在哪个表.go

發布時間:2025/3/20 数据库 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 检查哪些项目_mysql根据内容查询在哪个表.go 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

package main

import (

"database/sql"

"errors"

"fmt"

"github.com/go-ini/ini"

_ "github.com/go-sql-driver/mysql"

termbox "github.com/nsf/termbox-go"

"time"

)

//全局變量

var (

db *sql.DB

ip string

port string

username string

password string

database string

wait_time int

content string

)

//初始化ini文件

func initIni() error {

cfg, err := ini.Load("my.ini")

if err != nil {

return errors.New("ini文件讀取失敗")

}

ip = cfg.Section("mysql").Key("ip").String()

port = cfg.Section("mysql").Key("port").String()

username = cfg.Section("mysql").Key("username").String()

password = cfg.Section("mysql").Key("password").String()

database = cfg.Section("mysql").Key("database").String()

content = cfg.Section("mysql").Key("content").String()

wait_time, err = cfg.Section("mysql").Key("wait_time").Int()

if err != nil {

return errors.New("wait_time參數不是整數")

}

return nil

}

//初始化mysql

func initDB() (err error) {

var dsn = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", username, password, ip, port, database)

//Open只會驗證dsb的格式是否正確,不會驗證是否連接成功,同理,密碼是否正確也不知道

db, err = sql.Open("mysql", dsn)

if err != nil {

return errors.New("格式錯誤")

}

// 此時嘗試連接數據庫,會判斷用戶,密碼,ip地址,端口是否正確

err = db.Ping()

if err != nil {

return errors.New("配置錯誤")

}

return nil

}

type Table struct {

//表名

TableName string

}

// 根據數據庫獲取當前數據庫下所有表

func DatabaseToTables() ([]Table, error) {

var sqlStr = "show TABLES;"

rows, err := db.Query(sqlStr)

if err != nil {

return nil, errors.New("查詢失敗")

}

defer rows.Close()

var tables = make([]Table, 0, 100)

for rows.Next() {

var table Table

err = rows.Scan(&table.TableName)

if err != nil {

return nil, errors.New("綁定數據失敗")

}

tables = append(tables, table)

}

return tables, nil

}

type Field struct {

//列名

ColumnName string

}

// 根據表名獲取當前表所有字段

func TableToFields(table string) ([]Field, error) {

var sqlStr = "select COLUMN_NAME from information_schema.COLUMNS where table_name = '%s';"

sqlStr = fmt.Sprintf(sqlStr, table)

rows, err := db.Query(sqlStr)

if err != nil {

return nil, errors.New("查詢失敗")

}

defer rows.Close()

var fields = make([]Field, 0, 100)

for rows.Next() {

var field Field

err = rows.Scan(&field.ColumnName)

if err != nil {

return nil, errors.New("綁定數據失敗")

}

fields = append(fields, field)

}

return fields, nil

}

//根據字段一一查詢

func FieldSelect(table, field, content string) (map[string]string, error) {

//fmt.Println(table, field, content)

var sqlStr = "SELECT * from %s where %s like '%%%s%%';"

sqlStr = fmt.Sprintf(sqlStr, table, field, content)

rows, err := db.Query(sqlStr)

if err != nil {

return nil, errors.New("sql查詢失敗")

}

//函數結束釋放鏈接

defer rows.Close()

//sql轉map

result, err := ScanRow(rows)

if err != nil {

return nil, err

}

return result, nil

}

//獲取單個

func ScanRow(rows *sql.Rows) (map[string]string, error) {

//讀出查詢出的列字段名

cols, _ := rows.Columns()

//values是每個列的值,這里獲取到byte里

values := make([][]byte, len(cols))

//query.Scan的參數,因為每次查詢出來的列是不定長的,用len(cols)定住當次查詢的長度

scans := make([]interface{}, len(cols))

//讓每一行數據都填充到[][]byte里面,貍貓換太子

for i := range values {

scans[i] = &values[i]

}

//獲取單行必須Next()

rows.Next()

//傳指針進去,但是不通過指針能獲取值

err := rows.Scan(scans...)

if err != nil {

return nil, errors.New("Scan失敗")

}

row := make(map[string]string)

for k, v := range values {

//cols[k]為字段名

key := cols[k]

row[key] = string(v)

}

return row, nil

}

func pause() {

fmt.Println("請按任意鍵繼續...")

Loop:

for {

switch ev := termbox.PollEvent(); ev.Type {

case termbox.EventKey:

break Loop

}

}

}

func main() {

//初始化ini

err := initIni()

if err != nil {

fmt.Println("錯誤:", err)

pause()

return

}

//初始化mysql

err = initDB()

if err != nil {

fmt.Println("錯誤:", err)

pause()

return

}

//開始時間

begin_time := time.Now()

// begin:主要邏輯,三層for循環

//根據數據庫獲取當前數據庫下所有表

tables, err := DatabaseToTables()

if err != nil {

fmt.Println("錯誤:", err)

pause()

return

}

for _, table := range tables {

fields, err := TableToFields(table.TableName)

if err != nil {

fmt.Println("錯誤:", err)

pause()

return

}

for _, field := range fields {

_, err := FieldSelect(table.TableName, field.ColumnName, content)

//err != nil表示查詢失敗,繼續下次查詢

if err != nil {

continue

}

//fmt.Println(row)

fmt.Printf("表名:%s,列名:%s\n", table.TableName, field.ColumnName)

//睡眠指定時間

time.Sleep(time.Millisecond * time.Duration(wait_time))

}

}

elapsed_time := time.Now().Sub(begin_time)

fmt.Println("運行時間:", elapsed_time)

//任意鍵結束

pause()

//end:主要邏輯

}

一鍵復制

編輯

Web IDE

原始數據

按行查看

歷史

總結

以上是生活随笔為你收集整理的mysql 检查哪些项目_mysql根据内容查询在哪个表.go的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。