标签:自增字段 创建表 指定 exe primary automatic ext 准备 $2
假设有了数据库,创建表
CREATE TABLE `userinfo` ( `uid` INT(10) NOT NULL AUTO_INCREMENT, //自增字段 `username` VARCHAR(64) NULL DEFAULT NULL, //默认值 `department` VARCHAR(64) NULL DEFAULT NULL, `created` DATE NULL DEFAULT NULL, PRIMARY KEY (`uid`) //主键 ); CREATE TABLE `userdetail` ( `uid` INT(10) NOT NULL DEFAULT ‘0‘, `intro` TEXT NULL, `profile` TEXT NULL, PRIMARY KEY (`uid`) )
go中操作数据库与python不一样,go没有提供数据库驱动,但提供了接口,我们可以根据接口开发驱动,或是使用第三方库
先来看Mysql数据库的
package main
import (
"database/sql"
"fmt"
//"time"
_ "github.com/go-sql-driver/mysql" //第三方库,前面加了下划线运行Init函数配置接口.
)
func main() {
db, err := sql.Open("mysql", "admin:xxxx@tcp(127.0.0.1:3306)/haha?charset=utf8") //open函数用来打开一个注册过的数据库驱动.格式:user:password@tcp(localhost:5555)/dbname?charest=utf8
checkErr(err)
//插入数据
stmt, err := db.Prepare("INSERT userinfo SET username=?,department=?,created=?") //准备sql要执行的操作,然后返回准备完毕的状态
checkErr(err)
res, err := stmt.Exec("a", "研发部门", "2018-1-09")//执行准备好的sql语句
checkErr(err)
id, err := res.LastInsertId()//自增ID
checkErr(err)
fmt.Println(id)
//更新数据
stmt, err = db.Prepare("update userinfo set username=? where uid=?")
checkErr(err)
res, err = stmt.Exec("astaxieupdate", id)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println(affect)
//查询数据
rows, err := db.Query("SELECT * FROM userinfo") //执行返回结果
checkErr(err)
for rows.Next() {
var uid int
var username string
var department string
var created string
err = rows.Scan(&uid, &username, &department, &created)
checkErr(err)
fmt.Println(uid)
fmt.Println(username)
fmt.Println(department)
fmt.Println(created)
}
//删除数据
stmt, err = db.Prepare("delete from userinfo where uid=?")
checkErr(err)
res, err = stmt.Exec(id)
checkErr(err)
affect, err = res.RowsAffected()
checkErr(err)
fmt.Println(affect)
db.Close()
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
//https://github.com/mattn/go-sqlite3驱动
func init() { //以上数据库都是以sql.Register注册的
sql.Register("sqlite3", &SQLiteDriver{})
}
//https://github.com/mikespook/mymysql驱动
// Driver automatically registered in database/sql
var d = Driver{proto: "tcp", raddr: "127.0.0.1:3306"}
func init() {
Register("SET NAMES utf8")
sql.Register("mymysql", &d)
}
sqlite3操作与上面代码基本一致.也需要引入第三方库,在MYSQL中使用?号传递数据,而PostgreSQL是通过$1,$2这种方式来指定要传递的参数
标签:自增字段 创建表 指定 exe primary automatic ext 准备 $2
原文地址:https://www.cnblogs.com/esiarp/p/9007394.html