目录

使用-Golang-操作-MySQL

目录

使用 Golang 操作 MySQL

在Go语言中,操作SQL数据库,通常会用到一些第三方库来简化数据库的连接、查询和操作过程。其中原生的 database/sql + go-sql-driver/mysql 库更符合sql语句使用习惯。

安装

go get github.com/go-sql-driver/mysql

直接上代码来演示基本的创建,插入,更新,删除操作。

package main

import (
	"database/sql"
	"fmt"

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

type Staff struct {
	id        int
	age       int
	name      string
	email     string
	create_at string
}

func main() {
	db, err := sql.Open("mysql", "zy:123456@tcp(localhost:3306)/company")
	if err != nil {
		panic(err)
	}
	defer db.Close()

	/* create table */
	createTableQuery := `CREATE TABLE IF NOT EXISTS department (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(100) NOT NULL,
        email VARCHAR(100) NOT NULL,
		age INT NOT NULL,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )`

	_, err = db.Exec(createTableQuery)
	if err != nil {
		panic(err)
	} else {
		fmt.Println("Table created successfully")
	}

	/* insert data */
	insertCmd := `INSERT INTO department (name, email, age) VALUES ("xiaoming", "xiaoming@email.com", 25)`
	if result, err := db.Exec(insertCmd); err != nil {
		panic(err)
	} else {
		if id, err := result.LastInsertId(); err != nil {
			panic(err)
		} else {
			fmt.Printf("insert id %d\n", id)
		}
	}

	/* query data */
	queryCmd := `SELECT * FROM department`
	rows, err := db.Query(queryCmd)
	if err != nil {
		panic(err)
	}
	defer rows.Close()
	for rows.Next() {
		var person Staff
		rows.Scan(&person.id, &person.name, &person.email, &person.age, &person.create_at)
		fmt.Printf("%v\n", person)
	}

	/* update data */
	updateCmd := `UPDATE department set age = 30 WHERE name = "xiaoming"`
	result, err := db.Exec(updateCmd)
	if err != nil {
		panic(err)
	} else {
		if affectId, err := result.RowsAffected(); err != nil {
			panic(err)
		} else {
			fmt.Printf("update success, rows count %d\n", affectId)
		}
	}

	/* delete */
	deleteCmd := `DELETE FROM department WHERE name = "xiaoming"`
	result, err = db.Exec(deleteCmd)
	if err != nil {
		panic(err)
	} else {
		if affectId, err := result.RowsAffected(); err != nil {
			panic(err)
		} else {
			fmt.Printf("delete success, rows count %d\n", affectId)
		}
	}
}