Home Database Mysql Tutorial How to extract data from MySQL database using Go language

How to extract data from MySQL database using Go language

Jun 17, 2023 pm 10:21 PM
go language mysql database Data extraction

MySQL is a very popular relational database, and the Go language is a rapidly developing programming language. If you combine the two, you can achieve convenient and efficient data extraction. This article will introduce the method of using Go language to extract MySQL data. I hope it can inspire and help everyone.

1. Install and configure the MySQL driver

Before using the Go language to extract MySQL data, we need to install the MySQL driver first. There are many choices for MySQL drivers. Here we introduce the two most commonly used ones: go-sql-driver and mysql driver.

Use go-sql-driver to install, you can use the following command:

go get -u github.com/go-sql-driver/mysql
Copy after login

Use the mysql driver to install, you can use the following command:

go get -u github.com/mysql/mysql-go
Copy after login

After the installation is completed, Just import the corresponding driver package in the code, for example:

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)
Copy after login

However, it should be noted that when using the MySQL driver, you also need to configure MySQL relatedly. The specific method is as follows:

  1. Set the character set of MySQL to utf8mb4

Versions before MySQL 5.7.7 use the utf8 character set by default, which only supports 3-byte unicode characters, while in 5.7. In versions 7 and later, the default character set is utf8mb4, which supports 4-byte unicode characters. You can set the character-set-server in the configuration file my.cnf or my.ini to utf8mb4 to support Chinese, etc. Special character effects.

  1. Enable binlog log

In MySQL, the binlog log records all sql statements that operate on MySQL, so when extracting data, you need to enable the binlog log. for real-time data synchronization. It can be configured and enabled in my.cnf or my.ini.

2. Connect to the MySQL database

After installing the MySQL driver and configuring it accordingly, we need to connect to the MySQL database. The method to connect to the MySQL database is as follows:

db, err := sql.Open("mysql", "user:password@tcp(ip:port)/database")
Copy after login

Among them, user and password are the user name and password of MySQL, ip and port are the connection address and port number of MySQL, and database is the database to be accessed.

After successfully connecting to the MySQL database, we can perform corresponding data operations, such as reading data in MySQL into the Go language, or storing data in the Go language into MySQL.

3. SQL Statement Query

It is very simple to use SQL statements to query data in MySQL in Go language. We can use the sql.Query function to execute the query statement and save the results to the rows object, such as:

rows, err := db.Query("SELECT * FROM table1")
Copy after login

After successful execution, you can use the Next function of the rows object to traverse the results and take out one record each time. And encapsulate it into the corresponding struct object:

type Product struct {
    ID         int64  `db:"id"`
    Name       string `db:"name"`
    Price      int64  `db:"price"`
    CreateTime int64  `db:"create_time"`
}

func main() {
    rows, err := db.Query("SELECT * FROM product")  // 查询product表
    if err != nil {
        panic(err)
    }

    defer rows.Close()

    products := make([]Product, 0)

    for rows.Next() {  // 遍历结果集
        var p Product
        err = rows.Scan(&p.ID, &p.Name, &p.Price, &p.CreateTime)  // 将一条记录封装到Product对象中
        if err != nil {
            panic(err)
        }
        products = append(products, p)
    }
}
Copy after login

The method of using the sql.QueryRow function to query a single record is also very simple:

var p Product
err := db.QueryRow("SELECT * FROM product WHERE id=?", 1).Scan(&p.ID, &p.Name, &p.Price, &p.CreateTime)
if err != nil {
    panic(err)
}
Copy after login

4. Insert data

Use Inserting data into MySQL is also very simple with Go language. We can use the sql.Exec function to execute the SQL statement to achieve this:

stmt, err := db.Prepare("INSERT INTO product(name, price) VALUES(?,?)")
if err != nil {
    panic(err)
}

res, err := stmt.Exec("Product1", 100)
if err != nil {
    panic(err)
}
Copy after login

The Prepare function in the above code is used to prepare the SQL statement, and then use the Exec function to execute the SQL statement and return the result. If the execution is successful, the returned result contains the ID of the inserted data (if any), which can be obtained using the LastInsertId function. If you need to get the number of affected rows, you can use the RowsAffected function.

5. Update and delete data

Similar to inserting data, Go language can also use the sql.Exec function to execute SQL update statements and delete statements, as follows:

// 执行更新操作
stmt, err := db.Prepare("UPDATE product SET price=? WHERE id=?")
if err != nil {
    panic(err)
}

res, err := stmt.Exec(200, 1)
if err != nil {
    panic(err)
}

// 执行删除操作
stmt, err = db.Prepare("DELETE FROM product WHERE id=?")
if err != nil {
    panic(err)
}

res, err = stmt.Exec(1)
if err != nil {
    panic(err)
}
Copy after login

6. Transaction Management

When performing data operations, it is sometimes necessary to ensure the atomicity of the data, that is, all database operations either succeed or fail. At this point, we can use the transaction management mechanism to achieve this.

In the Go language, you can use db.Begin and tx.Commit to open and submit transactions, such as:

tx, err := db.Begin()
if err != nil {
    panic(err)
}

stmt, err := tx.Prepare("INSERT INTO product(name, price) VALUES(?,?)")
if err != nil {
    panic(err)
}

res, err := stmt.Exec("Product1", 100)
if err != nil {
    tx.Rollback()
    panic(err)
}

stmt, err = tx.Prepare("INSERT INTO product(name, price) VALUES(?,?)")
if err != nil {
    panic(err)
}

res, err = stmt.Exec("Product2", 200)
if err != nil {
    tx.Rollback()
    panic(err)
}

// 提交事务
err = tx.Commit()
if err != nil {
    tx.Rollback()
    panic(err)
}
Copy after login

In the above code, after opening the transaction, we can perform multiple operations in the transaction SQL operation. After executing all SQL operations and ensuring the atomicity of all SQL operations, you need to use the Commit() function to commit the transaction. If an error occurs in any SQL operation, you can use the Rollback() function to roll back the transaction.

7. Conclusion

This article introduces the method of using Go language to extract data from MySQL database. Through the above introduction, we can find that using Go language to perform data operations on MySQL database is very convenient and efficient. If you haven't tried using Go language for database operations, you might as well give it a try. I believe you will fall in love with it.

The above is the detailed content of How to extract data from MySQL database using Go language. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to use reflection to access private fields and methods in golang How to use reflection to access private fields and methods in golang May 03, 2024 pm 12:15 PM

You can use reflection to access private fields and methods in Go language: To access private fields: obtain the reflection value of the value through reflect.ValueOf(), then use FieldByName() to obtain the reflection value of the field, and call the String() method to print the value of the field . Call a private method: also obtain the reflection value of the value through reflect.ValueOf(), then use MethodByName() to obtain the reflection value of the method, and finally call the Call() method to execute the method. Practical case: Modify private field values ​​and call private methods through reflection to achieve object control and unit test coverage.

Tips for dynamically creating new functions in golang functions Tips for dynamically creating new functions in golang functions Apr 25, 2024 pm 02:39 PM

Go language provides two dynamic function creation technologies: closure and reflection. closures allow access to variables within the closure scope, and reflection can create new functions using the FuncOf function. These technologies are useful in customizing HTTP routers, implementing highly customizable systems, and building pluggable components.

The difference between performance testing and unit testing in Go language The difference between performance testing and unit testing in Go language May 08, 2024 pm 03:09 PM

Performance tests evaluate an application's performance under different loads, while unit tests verify the correctness of a single unit of code. Performance testing focuses on measuring response time and throughput, while unit testing focuses on function output and code coverage. Performance tests simulate real-world environments with high load and concurrency, while unit tests run under low load and serial conditions. The goal of performance testing is to identify performance bottlenecks and optimize the application, while the goal of unit testing is to ensure code correctness and robustness.

What pitfalls should we pay attention to when designing distributed systems with Golang technology? What pitfalls should we pay attention to when designing distributed systems with Golang technology? May 07, 2024 pm 12:39 PM

Pitfalls in Go Language When Designing Distributed Systems Go is a popular language used for developing distributed systems. However, there are some pitfalls to be aware of when using Go, which can undermine the robustness, performance, and correctness of your system. This article will explore some common pitfalls and provide practical examples on how to avoid them. 1. Overuse of concurrency Go is a concurrency language that encourages developers to use goroutines to increase parallelism. However, excessive use of concurrency can lead to system instability because too many goroutines compete for resources and cause context switching overhead. Practical case: Excessive use of concurrency leads to service response delays and resource competition, which manifests as high CPU utilization and high garbage collection overhead.

Golang technology libraries and tools used in machine learning Golang technology libraries and tools used in machine learning May 08, 2024 pm 09:42 PM

Libraries and tools for machine learning in the Go language include: TensorFlow: a popular machine learning library that provides tools for building, training, and deploying models. GoLearn: A series of classification, regression and clustering algorithms. Gonum: A scientific computing library that provides matrix operations and linear algebra functions.

The role of Golang technology in mobile IoT development The role of Golang technology in mobile IoT development May 09, 2024 pm 03:51 PM

With its high concurrency, efficiency and cross-platform nature, Go language has become an ideal choice for mobile Internet of Things (IoT) application development. Go's concurrency model achieves a high degree of concurrency through goroutines (lightweight coroutines), which is suitable for handling a large number of IoT devices connected at the same time. Go's low resource consumption helps run applications efficiently on mobile devices with limited computing and storage. Additionally, Go’s cross-platform support enables IoT applications to be easily deployed on a variety of mobile devices. The practical case demonstrates using Go to build a BLE temperature sensor application, communicating with the sensor through BLE and processing incoming data to read and display temperature readings.

The evolution of golang function naming convention The evolution of golang function naming convention May 01, 2024 pm 03:24 PM

The evolution of Golang function naming convention is as follows: Early stage (Go1.0): There is no formal convention and camel naming is used. Underscore convention (Go1.5): Exported functions start with a capital letter and are prefixed with an underscore. Factory function convention (Go1.13): Functions that create new objects are represented by the "New" prefix.

Can golang variable parameters be used for function return values? Can golang variable parameters be used for function return values? Apr 29, 2024 am 11:33 AM

In Go language, variable parameters cannot be used as function return values ​​because the return value of the function must be of a fixed type. Variadics are of unspecified type and therefore cannot be used as return values.

See all articles