建库建表 新建person
表1 2 3 4 5 6 create table person(user_id int primary key auto_increment, username varchar (260 ), sex varchar (260 ), email varchar (260 ) );
Golang操作Mysql数据库 安装sqlx go get github.com/jmoiron/sqlx
,
sqlx是一个go语言包,在内置database/sql包之上增加了很多扩展,简化数据库操作代码的书写
代码 定义初始化mysql函数:1 2 3 4 5 6 7 8 func init () { database, err := sqlx.Open("mysql" , "root:123456@tcp(192.168.0.131:3306)/goTest" ) if err != nil { fmt.Println("open mysql failed," , err) return } Db = database }
注意: MySQL ERROR 1130 (HY000): Host 'XXXX' is not allowed to connect to this MySQL server
要Mysql开启远程连接1 2 3 use mysql;update user set host = '%' where user = 'root' ;flush privileges ;
重启mysql
Insert 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 package mainimport ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" ) type Person struct { UserId int `db:"user_id"` Username string `db:"username"` Sex string `db:"sex"` Email string `db:"email"` } var Db *sqlx.DBfunc init () { database, err := sqlx.Open("mysql" , "root:123456@tcp(192.168.0.131:3306)/goTest" ) if err != nil { fmt.Println("open mysql failed," , err) return } Db = database } func main () { r, err := Db.Exec("insert into person(username, sex, email)values(?, ?, ?)" , "stu001" , "man" , "stu01@qq.com" ) if err != nil { fmt.Println("exec failed, " , err) return } id, err := r.LastInsertId() if err != nil { fmt.Println("exec failed, " , err) return } fmt.Println("insert succ:" , id) }
1 2 3 4 5 6 7 8 9 mysql> select * from person; + | user_id | username | sex | email | + | 1 | stu001 | man | stu01@qq.com | + 1 row in set (0.00 sec) mysql>
插入数据成功!
Update 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 package mainimport ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" ) type Person struct { UserId int `db:"user_id"` Username string `db:"username"` Sex string `db:"sex"` Email string `db:"email"` } var Db *sqlx.DBfunc init () { database, err := sqlx.Open("mysql" , "root:123456@tcp(192.168.0.131:3306)/goTest" ) if err != nil { fmt.Println("open mysql failed," , err) return } Db = database } func main () { _, err := Db.Exec("update person set username=? where user_id=?" , "stu003" , 1 ) if err != nil { fmt.Println("exec failed, " , err) return } fmt.Println("修改成功" ) }
1 2 3 4 5 6 7 8 9 mysql> select * from person; + | user_id | username | sex | email | + | 1 | stu003 | man | stu01@qq.com | + 1 row in set (0.00 sec) mysql>
Select 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 package mainimport ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" ) type Person struct { UserId int `db:"user_id"` Username string `db:"username"` Sex string `db:"sex"` Email string `db:"email"` } var Db *sqlx.DBfunc init () { database, err := sqlx.Open("mysql" , "root:123456@tcp(192.168.0.131:3306)/goTest" ) if err != nil { fmt.Println("open mysql failed," , err) return } Db = database } func main () { var person []Person err := Db.Select(&person, "select user_id, username, sex, email from person where user_id=?" , 1 ) if err != nil { fmt.Println("exec failed, " , err) return } fmt.Println("select succ:" , person) }
输出:1 select succ: [{1 stu003 man stu01@qq.com}]
Delete 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 package mainimport ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" ) type Person struct { UserId int `db:"user_id"` Username string `db:"username"` Sex string `db:"sex"` Email string `db:"email"` } var Db *sqlx.DBfunc init () { database, err := sqlx.Open("mysql" , "root:123456@tcp(192.168.0.131:3306)/goTest" ) if err != nil { fmt.Println("open mysql failed," , err) return } Db = database } func main () { _, err := Db.Exec("delete from person where user_id=?" , 1 ) if err != nil { fmt.Println("exec failed, " , err) return } fmt.Println("delete succ" ) }
1 2 3 4 mysql> select * from person; Empty set (0.00 sec) mysql>
删除成功!