文章目录

  • 一、重点内容:
    • 知识要点有哪些?
      • 1、理解database/SQL
      • 2、数据库表数据的CRUD
  • 二、详细知识点介绍:
    • 1、数据库导入
      • 下载导入数据库驱动:
      • 创建数据库表:
      • 创建数据库连接:
    • 2、数据库的CRUD:
      • 初始化:
      • 查询数据:
        • 1、多行查询:
        • 2、单行查询:
        • 3、预编译查询
      • 插入数据:
      • 更新数据:
      • 删除数据:
    • 3、数据库设计原理
    • 4、完整代码:
  • 三、课后个人总结:

一、重点内容:

知识要点有哪些?

1、理解database/SQL

2、数据库表数据的CRUD

二、详细知识点介绍:

1、数据库导入

下载导入数据库驱动:

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

创建数据库表:

CREATE TABLE `user` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT,`username` VARCHAR(20) DEFAULT '',`age` INT(11) DEFAULT '0',`score` int default 0PRIMARY KEY(`id`)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

创建数据库连接:

db, err := sql.Open("mysql", "root:XXXXXX@tcp(127.0.0.1:3306)/mybatis")
if err != nil {log.Fatal(err)
}
defer rows.Close()

2、数据库的CRUD:

初始化:

/*
*
初始化
*/
var db *sql.DBfunc init() {db1, err := sql.Open("mysql", "root:XXXXXX@tcp(127.0.0.1:3306)/mybatis")db = db1if err != nil {log.Fatal(err)}
}

查询数据:

方便查询我们先建立一个实体结构体:

type user struct {id       intusername stringage      intscore    int
}
1、多行查询:
//go:build ignore
// +build ignorepackage mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""log"
)type user struct {id       intusername stringage      intscore    int
}var db *sql.DBfunc main() {db1, err := sql.Open("mysql", "root:XXXX@tcp(127.0.0.1:3306)/mybatis")db = db1if err != nil {log.Fatal(err)}rows, err := db.Query("select * from user ")if err != nil {log.Fatal(err)}for rows.Next() {var user1 userrows.Scan(&user1.id, &user1.username, &user1.age, &user1.score)fmt.Println(user1.id, user1.username, user1.age, user1.score)}defer rows.Close()
}

测试:

2、单行查询:
//go:build ignore
// +build ignorepackage mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""log"
)type user struct {id       intusername stringage      intscore    int
}var db *sql.DBfunc main() {db1, err := sql.Open("mysql", "root:XXXXX@tcp(127.0.0.1:3306)/mybatis")db = db1sqlStr := "select * from user where id=?"var u user// 非常重要:确保QueryRow之后调用Scan方法,否则持有的数据库链接不会被释放err := db.QueryRow(sqlStr, 1).Scan(&u.id, &u.username, &u.age, &u.score)if err != nil {fmt.Printf("scan failed, err:%v\n", err)return}fmt.Printf("id:%d name:%s age:%d\n", u.id, u.username, u.age)defer rows.Close()
}

测试:

3、预编译查询
//go:build ignore
// +build ignorepackage mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""log"
)type user struct {id       intusername stringage      intscore    int
}func main() {open, err := sql.Open("mysql", "root:XXXXXX@tcp(127.0.0.1:3306)/mybatis")if err != nil {log.Fatal(err)}sqlStr := "select * from user where id>?"prepare, err := open.Prepare(sqlStr)if err != nil {log.Fatal(err)}query, err := prepare.Query(1)for query.Next() {var u userquery.Scan(&u.id, &u.username, &u.age, &u.score)fmt.Println(u.id, u.username, u.age, u.score)}query.Close()open.Close()
}

测试:

插入数据:

/*
插入新的数据,ID自增
*/
func insertRow(name string, age int, score int) {sqlStr := "insert into user(username,age,score) values (?,?,?)"exec, err := db.Exec(sqlStr, name, age, score)if err != nil {log.Fatal(err)}id, err := exec.LastInsertId()if err != nil {log.Fatal(err)}fmt.Println(id)
}

更新数据:

/*
更新数据
*/
func updateRow(id int, score int) {sqlStr := "update user set score=? where id=?"exec, err := db.Exec(sqlStr, score, id)if err != nil {log.Fatal(err)}affected, err := exec.RowsAffected()if err != nil {log.Fatal(err)}fmt.Println("影响行数:", affected)
}

删除数据:

/*
根据ID删除数据
*/
func deleteRow(id int) {sqlStr := "delete from user where id =?"exec, err := db.Exec(sqlStr, id)if err != nil {log.Fatal(err)}affected, err := exec.RowsAffected()if err != nil {log.Fatal(err)}fmt.Println("影响行数:", affected)
}

3、数据库设计原理

4、完整代码:

//go:build ignore
// +build ignorepackage mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""log"
)type user struct {id       intusername stringage      intscore    int
}func main() {fmt.Println("查询所有记录")queryAll()fmt.Println("根据ID查询")queryRowDemo(1)fmt.Println("插入新的数据")insertRow("罗某", 21, 78)fmt.Println("查询分数大于多少的数据")queryByScore(96)fmt.Println("更新数据")updateRow(3, 50)fmt.Println("删除数据")deleteRow(6)
}/*
*
初始化
*/
var db *sql.DBfunc init() {db1, err := sql.Open("mysql", "root:XXXXXX@tcp(127.0.0.1:3306)/mybatis")db = db1if err != nil {log.Fatal(err)}
}/*
查询所有记录
*/
func queryAll() {rows, err := db.Query("select * from user ")if err != nil {log.Fatal(err)}for rows.Next() {var user1 userrows.Scan(&user1.id, &user1.username, &user1.age, &user1.score)fmt.Println(user1.id, user1.username, user1.age, user1.score)}defer rows.Close()
}/*
根据ID查询
*/
func queryRowDemo(id int) {sqlStr := "select * from user where id=?"var u user// 非常重要:确保QueryRow之后调用Scan方法,否则持有的数据库链接不会被释放err := db.QueryRow(sqlStr, id).Scan(&u.id, &u.username, &u.age, &u.score)if err != nil {fmt.Printf("scan failed, err:%v\n", err)return}fmt.Printf("id:%d name:%s age:%d\n", u.id, u.username, u.age)
}/*
条件查询,分数大于多少的数据
*/
func queryByScore(score int) {sqlStr := "select * from user where score>?"prepare, err := db.Prepare(sqlStr)if err != nil {log.Fatal(err)}query, err := prepare.Query(score)for query.Next() {var u userquery.Scan(&u.id, &u.username, &u.age, &u.score)fmt.Printf("id:%d  name:%s age:%d score:%d\n", u.id, u.username, u.age, u.score)}
}/*
插入新的数据,ID自增
*/
func insertRow(name string, age int, score int) {sqlStr := "insert into user(username,age,score) values (?,?,?)"exec, err := db.Exec(sqlStr, name, age, score)if err != nil {log.Fatal(err)}id, err := exec.LastInsertId()if err != nil {log.Fatal(err)}fmt.Println(id)
}/*
更新数据
*/
func updateRow(id int, score int) {sqlStr := "update user set score=? where id=?"exec, err := db.Exec(sqlStr, score, id)if err != nil {log.Fatal(err)}affected, err := exec.RowsAffected()if err != nil {log.Fatal(err)}fmt.Println("影响行数:", affected)
}/*
根据ID删除数据
*/
func deleteRow(id int) {sqlStr := "delete from user where id =?"exec, err := db.Exec(sqlStr, id)if err != nil {log.Fatal(err)}affected, err := exec.RowsAffected()if err != nil {log.Fatal(err)}fmt.Println("影响行数:", affected)
}

三、课后个人总结:

​ 这次比较深入地去了解学习了go中数据库的操作,收获颇多。也开始了GORM库的学习,下一篇文章记录GORM的使用。

Go语言原生数据库操作(六)—— 数据库相关推荐

  1. golang odbc mysql_go语言通过odbc操作Access数据库的方法

    本文实例讲述了go语言通过odbc操作Access数据库的方法.分享给大家供大家参考.具体如下: 这里需要用到go-odbc库,下载地址为:https://github.com/weigj/go-od ...

  2. java 读取mysql数据库_原生Java操作mysql数据库过程解析

    这篇文章主要介绍了原生Java操作mysql数据库过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.引入数据库驱动的jar包 以通过mav ...

  3. 用C语言API(常用)操作MySql数据库

    连接数据库的步骤 MySql数据库是一个典型的C/S结构,包括客户端和服务器.当部署好了MySql服务器,想通过程序访问服务端的数据,在编写程序的时候,可以通过官方提供的C语言API来实现.      ...

  4. Golang原生sql操作Mysql数据库增删改查

    Golang要操作mysql数据库,首先需要在当期系统配置GOPATH,因为需要使用go get命令把驱动包下载到GOPATH下使用. 首先配置好你的GOPATH,执行以下命令,下载安装mysql驱动 ...

  5. python的数据库_python数据库操作-mysql数据库

    一:连接 1:本地连接 mysql -u用户名 -p密码 2:连接远程服务器 mysql -u用户名 -p密码 -hip地址 -P端口号 线下修改远程服务端上部署的mysql服务器 二:创建数据库 c ...

  6. 数据库实验六 数据库的完整性

    实验六 数据库的完整性 一.实验目的 1.掌握实体完整性的定义和维护方法. 2.掌握参照完整性的定义和维护方法. 3.掌握用户自定义完整性的定义和维护方法. 4.掌0握触发器的设计和使用方法 二.实验 ...

  7. yii mysql数据库操作_Yii2数据库操作常用方法小结

    本文实例讲述了Yii2数据库操作常用方法.分享给大家供大家参考,具体如下: 查询: // find the customers whose primary key value is 10 $custo ...

  8. python如何查询数据库_Python数据库操作手册-数据库专栏,SQL Server

    数据库的操作在现在的python里面已经变得十分的好用,有了一套api标准.下面的就是讲讲如何的去使用这套框架定义.此框架包含以下部分模块接口 连接对象 游标对象 dbi辅助对象 数据类型与定义 如何 ...

  9. mysql多数据源切换_CI 多数据库操作 切换数据库

    CI 切换数据库是很方便的,如: 连接多数据库 如果你需要同时连接多于一个的数据库,你可以用以下方式来实现:$DB1 = $this->load->database('group_one' ...

  10. python封装数据库操作_Python3 数据库操作小封装

    import pymysql ''' SQLController:对数据库操作 私有: __sql_connect(self): 作用:建立数据库连接 返回:数据库连接对象 __sql_insert_ ...

最新文章

  1. Centos7.5虚拟机无法ping通网关、外网IP地址
  2. Struts2国际化文件乱码解决
  3. i386和X86各是什么意思
  4. linux动态链接库软件,Linux 动态链接库
  5. php ajax取不到值,PHP没有从Ajax获取值
  6. java maven导入导出_Java +EasyUI+SpringMvc实现Excle导入导出(上)
  7. 深入理解simhash原理
  8. oc代码混淆_OC代码混淆工具
  9. 配置远程登陆交换机方法
  10. 怎样合理地定义用户流失
  11. STM32系统结构图理解及GPIO学习笔记
  12. STM8L串口中断进不去
  13. html的富文本有什么用,html中怎样使用富文本
  14. 遗传算法 - 简单介绍
  15. APP - 支付宝怎么延时转账?能否撤回转账?
  16. 机器人常用传感器学习总结
  17. JAVA中的各种引用
  18. SAP 更改登录界面图片
  19. 英文参考文献按照首字母排序使用matlab实现
  20. 当效益不好的时候为什么公司选择裁员,而不是降薪

热门文章

  1. 你说 文/江湖一劍客
  2. php cgminer,CGMINER中各个参数代表的意义(挖矿黑框参数)
  3. Java: String概述、对象创建的内存原理
  4. 那些年啊,那些事——一个程序员的奋斗史 ——124
  5. STM32串口中断程序-迪文屏,
  6. github怎么切换到gitee_将博客从github迁移至gitee
  7. 人脸识别毕业设计python_25 行 Python 代码毕业设计实现人脸识别
  8. 2022-2028年中国云制造行业深度调研及投资前景预测报告
  9. 了解escape、unescape
  10. 利用实际数据对期权希腊字母绘图_20200525_