标签:自增字段 创建表 指定 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