Go Web 编程之 数据库

概述

数据库用来存储数据。只要不是玩具项目,每个项目都需要用到数据库。现在用的最多的还是 MySQL,PostgreSQL的使用也在快速增长中。在 Web 开发中,数据库也是必须的。本文将介绍如何在 Go 语言中操作数据库,基于 MySQL。本文假定大家已经掌握了数据库和 MySQL 的基础知识。关于 MySQL 有一个非常详细的免费教程我放在参考中了,需要的自取。

Go 语言标准库database/sql只是提供了一组查询和操作数据库的接口,没有提供任何实现。在 Go 中操作数据库只能使用第三方库。各种类型的数据库都有对应的第三方库。Go 中支持 MySQL 的驱动中最常见的是go-sql-driver/mysql。该库支持database/sql,全部采用 go 实现。

数据库操作

准备工作

创建一个数据库department,表示公司中的某个部门。在该库中创建两张表employeesteamsemployees记录员工信息,teams记录小组信息。每个员工都属于一个小组,每个小组都有若干名员工。

SET NAMES utf8mb4;

CREATE DATABASE IF NOT EXISTS `department`
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

USE `department`;

CREATE TABLE IF NOT EXISTS `employees` (
  `id` INT(11) AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(255) NOT NULL DEFAULT '',
  `age` INT(11) NOT NULL DEFAULT 0,
  `salary` INT(11) NOT NULL DEFAULT 0,
  `team_id` INT(11) NOT NULL DEFAULT 0
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `teams` (
  `id` INT(11) AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(255) NOT NULL DEFAULT ''
) ENGINE=InnoDB;

INSERT INTO `teams`(`name`)
VALUES
  ('策划'),
  ('开发'),
  ('运营'),
  ('运维');

INSERT INTO `employees`(`name`, `age`, `salary`, `team_id`)
VALUES
  ('张三', 28, 1200, 1),
  ('李四', 38, 4000, 1),
  ('王五', 36, 3500, 1),
  ('赵六', 31, 3100, 2),
  ('田七', 29, 2900, 2),
  ('吴八', 27, 1500, 3),
  ('朱九', 26, 1600, 3),
  ('钱十', 27, 1800, 3),
  ('陶十一', 28, 1900, 4),
  ('汪十二', 25, 2000, 4),
  ('剑十三', 24, 30000, 4);

插入一些测试数据。将这个department.sql文件保存到某个目录,然后在该目录打开命令行:

$ mysql -u root -p

输入密码连接到数据库,然后输入以下命令:

mysql> source department.sql
Query OK, 0 rows affected (0.00 sec)

Query OK, 2 rows affected (0.02 sec)

Query OK, 1 row affected (0.00 sec)

Database changed
Query OK, 0 rows affected, 4 warnings (0.02 sec)

Query OK, 0 rows affected, 1 warning (0.02 sec)

Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

Query OK, 11 rows affected (0.00 sec)
Records: 11  Duplicates: 0  Warnings: 0

mysql>

这样数据库和表就创建好了。

连接数据库

go-sql-driver/mysql是第三方库,需要安装:

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

使用:

package main

import (
  "database/sql"
  "log"

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

func main() {
  db, err := sql.Open("mysql", "root:12345@tcp(127.0.0.1:3306)/department")
  if err != nil {
    log.Fatal("connect database failed: ", err)
  }
  defer db.Close()
}

我们操作数据库并不是直接使用mysql库,而是通过database/sql的接口。

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

上面代码导入mysql,但并不直接使用,而是利用导入的副作用执行mysql库的init函数,将mysql驱动注册到database/sql中:

// go-sql-driver/mysql/driver.go
func init() {
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值