Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


程序:mysql:go

MySQL & Go


DSN(Data Source Name)的写法:root:password123@tcp(127.0.0.1:3306)/shop?charset=utf8mb4&parseTime=True&loc=Local

  1. root:password123:MySQL 用户名和密码
  2. @tcp(127.0.0.1:3306):连接方式和 MySQL 地址
  3. /shop:要连接的数据库名称
  4. ?charset=utf8mb4&parseTime=True&loc=Local:编码和时间的设置
// 需要安装:go get -u github.com/go-sql-driver/mysql
 
package main
 
import (
	"database/sql"
	"fmt"
	"log"
 
	_ "github.com/go-sql-driver/mysql"
)
 
func main() {
	// 连接字符串格式:username:password@protocol(address)/dbname?param=value
	dsn := "root:password123@tcp(127.0.0.1:3306)/shop?charset=utf8mb4&parseTime=True&loc=Local"
	// "mysql"是 Go 中 数据库驱动名称,告诉 database/sql 标准库:“我要使用哪个具体的数据库驱动(连接器)来处理这个连接。”
	db, err := sql.Open("mysql", dsn)
	if err != nil {
		log.Fatal("连接失败:", err)
	}
	defer db.Close()
 
	// 检查连接
	err = db.Ping()
	if err != nil {
		log.Fatal("无法连接数据库:", err)
	}
	fmt.Println("成功连接 MySQL!")
}
// 插入数据
result, err := db.Exec("INSERT INTO users(name, email) VALUES(?, ?)", "Alice", "alice@example.com")
id, _ := result.LastInsertId()
fmt.Println("新用户ID:", id)
 
// 查询数据(单行)
var name, email string
err := db.QueryRow("SELECT name, email FROM users WHERE id = ?", 1).Scan(&name, &email)
fmt.Println(name, email)
 
// 查询多行
rows, err := db.Query("SELECT id, name FROM users")
defer rows.Close()
for rows.Next() {
	var id int
	var name string
	rows.Scan(&id, &name)
	fmt.Println(id, name)
}
 
// 更新数据
_, err := db.Exec("UPDATE users SET name=? WHERE id=?", "Bob", 1)
 
// 删除数据
_, err := db.Exec("DELETE FROM users WHERE id=?", 1)
/var/www/DokuWikiStick/dokuwiki/data/pages/程序/mysql/go.txt · Last modified: 2025/05/20 12:35 by zhonghui