前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go语言学习-mysql

go语言学习-mysql

作者头像
solate
发布2019-07-22 16:48:15
4250
发布2019-07-22 16:48:15
举报

mysql使用

sql语句

DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) DEFAULT NULL,
    `age` int(11) DEFAULT NULL,
    `IsBoy` tinyint(4) DEFAULT NULL, 
    PRIMARY KEY (`id`)
)
DEFAULT CHARSET=utf8;

sql语句使用

Query 返回的 rows,取完数据后需要调用 Close 来释放资源

package main

import (
	"fmt"
	"database/sql"
	_ "github.com/go-sql-driver/mysql"
)

func main() {
	db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer db.Close()

	var result sql.Result
	//向数据库中插入一条数据
	result, err = db.Exec("insert into person(name,age,IsBoy) values(?,?, ?)", "张三 ", 19, true)
	if err != nil {
		fmt.Println(err)
		return
	}
	lastId, _ := result.LastInsertId()
	fmt.Println("新插入的数据 ID 为", lastId)

	var row *sql.Row
	//返回一行数据
	row = db.QueryRow("select * from person")
	var name string
	var id, age int
	var isBoy bool
	//取数据进行显示
	err = row.Scan(&id, &name, &age, &isBoy)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(id, "\t", name, "\t", age, "\t", isBoy) //再插入一条数据

	result, err = db.Exec("insert into person(name,age,IsBoy) values(?, ?, ?)", "王红", 18, false)
	fmt.Println(" == == == == == == == == == == = ")
	var rows *sql.Rows
	rows, err = db.Query("select * from person")
	if err != nil {
		fmt.Println(err)
		return
	}
	for rows.Next() {
		var name string
		var id, age int
		var isBoy bool
		rows.Scan(&id, &name, &age, &isBoy)
		fmt.Println(id, "\t", name, "\t", age, "\t", isBoy)
	}
	rows.Close()
	//最后,清空表
	db.Exec("truncate table person")
}

对 SQL 语句进行预处理

package main

import (
	"fmt"
	"database/sql"
	_ "github.com/go-sql-driver/mysql"
	"math/rand"
	"time"
)

func main() {
	db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer db.Close()

	var smt *sql.Stmt
	smt, err = db.Prepare("insert into person(name,age,IsBoy) values(?,?, ?)")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("开始插入数据....", time.Now())
	r := rand.New(rand.NewSource(time.Now().UnixNano()))
	for i := 0; i < 10000; i++ {
		_, err = smt.Exec(fmt.Sprintf("张%d", r.Int()), r.Intn(50), r.Intn(100) % 2)
		if err != nil {
			fmt.Println(err)
			return
		}
	}
	fmt.Println("数据插入完成!", time.Now())
}

事务

package main

import (
	"fmt"
	"database/sql"
	_ "github.com/go-sql-driver/mysql"
)
func main() {
	db,err:=sql.Open("mysql","root:root@tcp(127.0.0.1:3306)/test?charset=utf8")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer db.Close()


	var trans *sql.Tx
	trans, err = db.Begin()
	if err != nil {
		fmt.Println(err)
		return
	}
	result,err := trans.Exec("insert into person(name,age,IsBoy)values('张三',99,false)")
	if err != nil {
		fmt.Println(err)
		trans.Rollback()
	}
	fmt.Println(result.LastInsertId())
	trans.Commit()


	//最后,清空表
	db.Exec("truncate table person")


}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mysql使用
    • sql语句使用
      • 对 SQL 语句进行预处理
        • 事务
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档