老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

老男孩教育-Go语言操作MySQL(一)

老男孩IT教育

技术博客

2021年3月25日 15:58

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。

  MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

  Go语言MySQL包

  使用第三方开源的mysql库:

  github.com/go-sql-driver/mysql (MySQL驱动)

  github.com/jmoiron/sqlx (基于MySQL驱动的封装)

  通过如下命令,保存下载第三方库:

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

  创建数据库、数据表

  在MySQL下创建 oldboy库:

mysql> CREATE DATABASE IF NOT EXISTS oldboy DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

  在oldboy库中创建student表。

mysql> use oldboy;

mysql> CREATE TABLE IF NOT EXISTS `student`(
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(100) NOT NULL,
    `sex` varchar(40) NOT NULL,
    `age` int(11) DEFAULT NULL,
    `course` varchar(100) NOT NULL,
    PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

  MySQL连接池

  数据库连接使用datebase/sql Open函数进行连接,用户应该通过db.Ping()函数来检查数据库是否实际可用。

package main

import (
    "fmt"

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

func main() {
    //DB, err := sqlx.Open("数据库类型", "用户名:密码@tcp(地址:端口)/数据库名")
    DB, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/oldboy")
    if err != nil {
        fmt.Println("Open mysql failed,", err)
    }
    err = DB.Ping()
    if err != nil {
        fmt.Println("Ping mysql failed,", err)
    } else {
        fmt.Println("MySQL client success")
    }
}

  连接池配置

  配置连接池有两个的函数:

  设置最大数据库连接:使用 db.SetMaxOpenConns(n int) 函数设置打开数据库的最大连接数。包含正在使用的连接和连接池的连接。如果你的函数调用需要申请一个连接,并且连接池已经没有了连接或者连接数达到了最大连接数。此时的函数调用将会被block,直到有可用的连接才会返回。设置这个值可以避免并发太高导致连接mysql出现too many connections的错误。该函数的默认设置是0,表示无限制。

  设置最大空闲连接:使用db.SetMaxIdleConns(n int) 函数设置连接池中的保持连接的最大连接数。默认也是0,表示连接池不会保持释放会连接池中的连接的连接状态:即当连接释放回到连接池的时候,连接将会被关闭。这会导致连接再连接池中频繁的关闭和创建。

  老男孩教育专注Linux云计算运维工程师、Python全栈+人工智能、Python自动化运维开发、网络安全、数据分析、新媒体运营、MySQLDBA开发、K8S微服务、Go语言等互联网课程培训。欢迎对it行业感兴趣的朋友们来公司考察及学习。

  推荐阅读:

  Python可以在手机上运行吗?Python视频教程!

  Python中tuple和list有什么区别?Python入门!

  Python网络爬虫之jupyter环境安装

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。