一、准备
1、MySQL :数据库服务端
2、MySQL Workbench:图形界面,用于连接数据库,对数据库进行操作
3、连接数据库并创建表
二、引入driver
import(
"database/sql"
_"github.com/go-sql-driver/mysql"// "_" 引入后面的包名 而不直接使用里面的定义的函数、变量、资源等
)
三、连接数据库
db,err := sql.Open("mysql","用户名:密码@tcp(127.0.0.1:3306)/demo?charset=utf8")
Tool.Check("打开数据库",err)
//执行Open函数的时候,并不会去获得数据库连接有效性,当执行数据库操作的时候才会去连接,
// 当我们需要在Open之后就知道连接的有效性的时候,可以通过Ping()来进行
err = db.Ping()
Tool.Check("连接的有效性",err)
四、插入数据
res,err := db.Exec("INSERT INTO test(name1,age) VALUES('程咬金',9000)")
Tool.Check("插入数据",err)
id,err := res.LastInsertId()
Tool.Check("插入的id",err)
log.Println(id)
五、更新数据
res,err := db.Exec("UPDATE test SET age = ? WHERE name1 = ?",1000000,"程咬金")
Tool.Check("更新数据",err)
id,err := res.LastInsertId()
Tool.Check("更新的id",err)
log.Println(id)
六、删除数据
res,err := db.Exec("DELETE FROM test WHERE name1 = ?","程咬金")
Tool.Check("删除数据",err)
id,err := res.LastInsertId()
Tool.Check("删除数据的id",err)
log.Println(id)
七、预备表达式
//预备表达式 用来优化SQL查询 提高性能 减少SQL注入的风险
stmt,err := db.Prepare("UPDATE test SET age = ? WHERE name1 = 1 OR 1=1;")
Tool.Check("获取行",err)
_,err = stmt.Exec("90909090","达摩")
Tool.Check("更新数据",err)
八、关闭数据库
defer db.Close()
九、遇到的错误
1.ERROR 1366: 1366: Incorrect string value: '\xE6\x98\xAF\xE7\x9A\x84' for column 'name' at row 1
SQL Statement:
原因是: 创建数据库的时候数据编码设置错误