成功连接数据库👇
var db *sql.DB
func getsql() { //十分重要的一点就是函数体内不要重新创建一个新的db变量!!!
dsn := "root:123456@tcp(127.0.0.1:3306)/go"
var err error
db, err = sql.Open("mysql", dsn)
if err != nil {
panic(err)
}
if err := db.Ping(); err != nil {
fmt.Println(err)
} else {
fmt.Println("get sql is true")
}
}
这个数据库的表alpha内只有两列数据,一列是id,一列是name。一下所有操作均为针对这个表的操作。在使用的时候根据环境自由调整
实现数据的插入(增
func insert(id int, name string) {
_, err := db.Exec("insert into alpha(id,name) values (?,?)", id, name)
//使用占位符插入id和name,根据自己的需求进行编写
if err != nil {
panic(err)
}
}
在main函数调用的时候需要传递两个值,一个是id,一个是name。这个可以根据自己的需求灵活修改
实现数据的查询1.查询所有数据
func selectdata() ([]int, []string) {//把查询到的数据添加到切片,返回切片
rows, err := db.Query("select * from alpha")//数据库的查询语句
if err != nil {
panic(err)
}
defer rows.Close()
id_s := make([]int, 0)
name_s := make([]string, 0)
for rows.Next() {//循环所有数据
var id int
var name string
if err := rows.Scan(&id, &name); err != nil {//把每一行的数据赋值个相应变量
panic(err)
}
id_s = append(id_s, id)//把循环的id和name追加到切片
name_s = append(name_s, name)
}
if err := rows.Err(); err != nil {
panic(err)
}
return id_s, name_s//返回切片
}
实现数据的查询2.查询某一行数据
func sele_one(id int) (int, string) {//用户输入需要查询的id,函数返回id和name
var name string
err := db.QueryRow("select * from alpha where id=?", id).Scan(&id, &name)//查询到的结果写入id和name变量
//db。QueryRow只会查询一行
if err != nil {
panic(err)
}
return id, name//返回id和name
}
实现数据的删除(删
func delete(id int) {//用户给出需要删除的id
_, err := db.Exec("delete from alpha where id=?", id)//执行删除语句,删除一整行数据
if err != nil {
panic(err)
}
}
实现数据的修改(改
func changedata(id int, name string) {//用户给出需要改变的行的id和要改成什么
_, err := db.Exec("update alpha set name=? where id=?", name, id)//执行sql修改语句,不会修改id,只会修改name。主要是因为id一般都是固定的不会改变的,如果有需要也可以修改
if err != nil {
panic(err)
}
}