当前位置: 首页 > news >正文

使用 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)
		}
	}
}

相关文章:

  • 版本控制器Git(2)
  • 2025.3.13总结
  • SvelteKit 最新中文文档教程(2)—— 路由
  • 版本控制泄露源码 .git
  • kotlin与MVVM结合使用总结(一)
  • (笔记)Linux加载内核驱动模块(第二种)
  • 腾龙T2000边缘计算网关:开启智能物联新时代
  • 爬虫逆向:Unicorn 详细使用指南
  • 华为云容器引擎应用场景
  • 算法每日一练 (11)
  • JavaScript-闭包
  • 22 - 天 TCPIP 四层模型是什么?Cookie、Session、Token 之间有什么区别?从网络角度来看,用户从输入网址到网页显示,期间发生了什么?
  • UART转AHB总线接口参考设计介绍
  • 【cocos creator】游戏优化,内存,性能,包体积大小,加载,drawcall优化
  • 函数调用汇编
  • iPaaS集成平台轻量化架构的重要性
  • xlua 运行原理
  • DoS攻击防范
  • Linux中查询软件存在
  • 迪威 3D 模型发布系统:制造业产品展示革新利器
  • 贵州茅台:支持工作餐不上酒的规定,请投资者相信茅台创新和自我调节能力
  • 戛纳参赛片《爱丁顿》评论两极,导演:在这个世道不奇怪
  • 这位中国电影早期的全能奇才,90年前唱响国歌
  • 聘期三年已至:37岁香港青年叶家麟卸任三亚市旅游发展局局长
  • 读懂城市|成都高新区:打造“人尽其才”的“理想之城”
  • 东部沿海大省浙江,为何盯上内河航运?