引言
在上一篇文章中,我们成功连接了 MySQL 数据库,并成功打印出 MySQL 的版本号,本篇文章就来介绍如何使用 Go 语言操作数据库。
创建数据库表
我们在 DB_TEST
数据库中新建一个 user
数据库,包含主键 id 和名字 name,可以使用如下语句:
_, err2 := db.Exec("CREATE TABLE user(id INT NOT NULL , name VARCHAR(20), PRIMARY KEY(ID));")
我们可以先在 MySQL 终端中查看我们的数据库表。
mysql> use DB_TEST; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +-------------------+ | Tables_in_db_test | +-------------------+ | table_name | +-------------------+ 1 row in set (0.00 sec)
编写的 Go 语言的代码如下:
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "log" ) func main() { db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/DB_TEST") db.Ping() defer db.Close() if err != nil { fmt.Println("数据库连接失败!") log.Fatalln(err) } _, err2 := db.Exec("CREATE TABLE user(id INT NOT NULL , name VARCHAR(20), PRIMARY KEY(ID));") if err2 != nil { log.Fatal(err2) } fmt.Print("Successfully Created\n") }
运行该程序:
Successfully Created
再来查看我们的数据库表 show tables;
,会看到多了一个 user 表,说明创建数据库表成功:
mysql> show tables; +-------------------+ | Tables_in_db_test | +-------------------+ | table_name | | user | +-------------------+ 2 rows in set (0.01 sec)
插入数据
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "log" ) func main() { db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/DB_TEST") db.Ping() defer db.Close() if err != nil { fmt.Println("数据库连接失败!") log.Fatalln(err) } _, err2 := db.Query("INSERT INTO user VALUES(1, 'Wade')") if err2 != nil { log.Fatal(err2) } fmt.Print("Successfully Inserted\n") }
回到数据库终端,查看一下 user 表 select * from user;
,可以看到我们刚刚插入成功的一条数据:
mysql> select * from user; +----+------+ | id | name | +----+------+ | 1 | Wade | +----+------+ 1 row in set (0.00 sec)
查询所有数据
我们在数据库中再插入一条数据,使用如下命令 INSERT INTO user VALUES(2, 'Kyrie');
:
mysql> INSERT INTO user VALUES(2, 'Kyrie'); Query OK, 1 row affected (0.00 sec)
然后使用 db.Query("SELECT * FROM user")
查询 user 数据库表中的所有数据:
package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "log" ) func main() { db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/DB_TEST") db.Ping() defer db.Close() if err != nil { fmt.Println("数据库连接失败!") log.Fatalln(err) } result, err2 := db.Query("SELECT * FROM user") if err2 != nil { log.Fatal(err2) } for result.Next() { var id int var name string err = result.Scan(&id, &name) if err != nil { panic(err) } fmt.Printf("Id: %d, Name: %s\n", id, name) } }
执行结果:
Id: 1, Name: Wade Id: 2, Name: Kyrie