Go实战--go语言操作MySQL数据库(go-sql-driver/mysql)

标签: 数据库 mysql golang
5924人阅读 评论(0) 收藏 举报
分类:

生命不止,继续 go go go !!!

之前关于golang操作数据库的博客:
Go实战–go语言操作sqlite数据库(The way to go)

Go实战–golang中使用MongoDB(mgo)

Go实战–golang中使用redis(redigo和go-redis/redis)

今天继续,跟大家介绍golang中如何使用MySQL数据库。

何为MySQL

Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

From Wiki:
MySQL(官方发音为/maɪ ˌɛskjuːˈɛl/“My S-Q-L”,但也经常读作/maɪ ˈsiːkwəl/“My Sequel”)原本是一个开放源代码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被昇阳微系统(Sun Microsystems)收购。2009年,甲骨文公司(Oracle)收购昇阳微系统公司,MySQL成为Oracle旗下产品。
MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google和Facebook等网站。非常流行的开源软件组合LAMP中的“M”指的就是MySQL。
但被甲骨文公司收购后,Oracle大幅调涨MySQL商业版的售价,且甲骨文公司不再支持另一个自由软件项目OpenSolaris的发展,因此导致自由软件社区们对于Oracle是否还会持续支持MySQL社区版(MySQL之中唯一的免费版本)有所隐忧,MySQL的创始人麦克尔·维德纽斯以MySQL为基础,成立分支计划MariaDB。而原先一些使用MySQL的开源软件逐渐转向MariaDB或其它的数据库。例如维基百科已于2013年正式宣布将从MySQL迁移到MariaDB数据库。

Windows下安装MySQL

我们当然下载免费的社区版喽,有两种格式,一种是msi,一种是zip。这里介绍的是zip格式的MySQL安装配置。

下载
https://dev.mysql.com/downloads/mysql/

解压
例如解压到D:\mysql-5.7.18-winx64

新建配置文件
在D:\mysql-5.7.18-winx64下新建my.ini文件,my.ini文件键入:

[mysqld]
basedir=D:\mysql-5.7.18-winx64
datadir=D:\mysql-5.7.18-winx64\data

这里切记,千万不要自己手动新建data文件夹

添加环境变量
把D:\mysql-5.7.18-winx64\bin路径添加到环境变量中

启动cmd
这里要注意的是,右键以管理员身份启动cmd.exe,cmd.exe的位置在 C:\Windows\System32

安装MySQL
以管理员身份打开cmd后,进入MySQL所在的文件夹:D:\mysql-5.7.18-winx64\bin,键入命令:

D:\mysql-5.7.18-winx64\bin>mysqld -install
Service successfully installed.

在任务管理器的服务中即可看到:
这里写图片描述

初始化
键入命令:

D:\mysql-5.7.18-winx64\bin>mysqld --initialize

启动服务

D:\mysql-5.7.18-winx64\bin>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。

停止服务
至此,你以为大功告成了吗?键入:

D:\mysql-5.7.18-winx64\bin>mysql
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)

首先要停止服务:

D:\mysql-5.7.18-winx64\bin>net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。

重置密码
键入命令

D:\mysql-5.7.18-winx64\bin>mysqld --skip-grant-tables

打开另一个cmd,键入:mysql -u root -p,并在输入密码的时候按下回车

D:\mysql-5.7.18-winx64\bin>mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.18 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

键入命令:

mysql> use mysql
Database changed

键入命令:

mysql> update user set authentication_string=password("wangshubo") where user="root";
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

新建数据库

mysql> create database test;
Query OK, 1 row affected (0.06 sec)

新建表

mysql> create table user_info(
    -> id int(4) not null primary key auto_increment,
    -> name char(20) not null);
Query OK, 0 rows affected (0.29 sec)

go-sql-driver/mysql开源库

github地址
https://github.com/go-sql-driver/mysql

安装

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

导入包

import (
    "database/sql"
    "fmt"

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

连接数据库

    db, err := sql.Open("mysql", "root:wangshubo@/test?charset=utf8")
    checkErr(err)

插入数据

    stmt, err := db.Prepare("INSERT user_info SET id=?,name=?")
    checkErr(err)

    res, err := stmt.Exec(1, "wangshubo")
    checkErr(err)

更新数据

    stmt, err = db.Prepare("update user_info set name=? where id=?")
    checkErr(err)

    res, err = stmt.Exec("astaxieupdate", id)
    checkErr(err)

查询

    rows, err := db.Query("SELECT * FROM user_info")
    checkErr(err)

删除

stmt, err = db.Prepare("delete from user_info where id=?")
checkErr(err)

res, err = stmt.Exec(id)
checkErr(err)

完整代码

package main

import (
    "database/sql"
    "fmt"

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

func main() {
    db, err := sql.Open("mysql", "root:wangshubo@/test?charset=utf8")
    checkErr(err)

    // insert
    stmt, err := db.Prepare("INSERT user_info SET id=?,name=?")
    checkErr(err)

    res, err := stmt.Exec(1, "wangshubo")
    checkErr(err)

    // update
    stmt, err = db.Prepare("update user_info set name=? where id=?")
    checkErr(err)

    res, err = stmt.Exec("wangshubo_update", 1)
    checkErr(err)

    affect, err := res.RowsAffected()
    checkErr(err)

    fmt.Println(affect)

    // query
    rows, err := db.Query("SELECT * FROM user_info")
    checkErr(err)

    for rows.Next() {
        var uid int
        var username string

        err = rows.Scan(&uid, &username)
        checkErr(err)
        fmt.Println(uid)
        fmt.Println(username)
    }

    // delete
    stmt, err = db.Prepare("delete from user_info where id=?")
    checkErr(err)

    res, err = stmt.Exec(1)
    checkErr(err)

    // query
    rows, err = db.Query("SELECT * FROM user_info")
    checkErr(err)

    for rows.Next() {
        var uid int
        var username string

        err = rows.Scan(&uid, &username)
        checkErr(err)
        fmt.Println(uid)
        fmt.Println(username)
    }

    db.Close()

}

func checkErr(err error) {
    if err != nil {
        panic(err)
    }
}

输出:
1
1
wangshubo_update
2
wangshubo
2
wangshubo

通过命令行查看表
这里写图片描述

这里写图片描述

查看评论

Go Web编程:访问数据库

第一次接触数据库的操作,很多概念都是陌生的,如果你跟我一样,请先移步:MySql入门(1) ,初步了解数据库的操作。本文后面的介绍将以mysql为主。Go没有内置操作数据库的驱动,仅仅定义了一套dat...
  • uudou
  • uudou
  • 2016-10-17 09:31:16
  • 2189

go语言:数据库操作之MySql

package main import ( "database/sql" _ "github.com/Go-SQL-Driver/MySQL" "log" ) func initMysql(...
  • x369201170
  • x369201170
  • 2014-05-27 15:35:49
  • 2480

go语言操作mysql范例(增删查改)

1 go语言连接mysql简介 go官方仅提供了database package,database package下有两个包sql,sql/driver。这两个包用来定义操作数据库的接口,这就保证了...
  • JesseYoung
  • JesseYoung
  • 2014-10-23 15:27:03
  • 14143

Go语言(goleveldb和ledisdb数据库介绍)

Mayuyu要介绍一个Go语言编写的K-V数据库,叫做goleveldb。   goleveldb在github上的链接为:https://github.com/syndtr/goleveldb   ...
  • ACHelloWorld
  • ACHelloWorld
  • 2015-02-28 17:48:33
  • 2880

Go实战--go语言操作PostgreSQL数据库(github.com/lib/pq)

生命不止,继续 Go go go !!!之前关于golang操作数据库的博客:Go实战–go语言操作MySQL数据库(go-sql-driver/mysql)Go实战–go语言操作sqlite数据库(...
  • wangshubo1989
  • wangshubo1989
  • 2017-08-22 13:16:30
  • 7564

go语言访问mysql数据库

Go-MySQL-Driver:一个Go语言的轻量级极速的mysql驱动 原文来自:http://hao.jobbole.com/go-mysql-driver/ Go...
  • newsyoung1
  • newsyoung1
  • 2014-09-18 11:51:20
  • 1337

Mysql的Go语言驱动--Go-MySQL-Driver的使用

一、特性 轻量级与快速原生Go语言,没有C绑定,只有纯Go没有不安全的操作(类型转换等)动态处理崩溃的连接动态连接池支持大于16MB的查询完全 sql.RawBytes支持 二、安装 简单...
  • skh2015java
  • skh2015java
  • 2016-11-15 17:55:20
  • 4136

Go-MySQL-Driver:一个Go语言的轻量级极速的mysql驱动

Go语言的 database/sql 包的一个 MySQL驱动。 特性 轻量级与快速原生Go语言,没有C绑定,只有纯Go没有不安全的操作(类型转换等)动态处理崩溃的连接动态连接池支持大于1...
  • txj236
  • txj236
  • 2016-10-21 15:13:05
  • 1023

<em>GO数据库</em>使用指南

<em>GO</em>(gene ontology)是基因本体联合会(Gene Onotology Consortium)所建立的<em>数据库</em>,旨 在建立一个适用于各种物种的 ,对基因和蛋白质功能进行限定和描述的 ,并能随着...
  • 2018年04月18日 00:00

【Go语言】连接数据库SQLite、MySQL、Oracle - Mike_zh

本文目录 说明: go语言连接数据库不像Java那么方便,本文分别介绍了连接三种典型的数据库的驱动以及连接方法:小型,SQLite;中型,MySQL;大型,Oracle. 1.Go连接S...
  • webxscan
  • webxscan
  • 2017-03-15 08:29:36
  • 457
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 499万+
    积分: 4万+
    排名: 94
    Google Analytics
    博客专栏
    文章分类