GOLANG之学习类库-mysql
接着上一篇,我们学习了复用goconfig做本地配置的一些操作,接下来我们复用配置来进行连接mysql数据库的相关操作。
一,准备工作
1,导入数据库驱动
1 import ( 2 "database/sql" 3 "fmt" 4 "github.com/Unknwon/goconfig" 5 _ "github.com/go-sql-driver/mysql" 初始化执行init 6 "log" 7 "os" 8 "time" 9 )
2,准备本地mysql数据库
1 CREATE TABLE `user` ( 2 `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 3 `name` varchar(20) DEFAULT NULL, 4 `age` tinyint(4) DEFAULT NULL, 5 PRIMARY KEY (`id`) 6 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4
二,连接MYSQL
1 mysqlConfig,err:= ConfigFile.GetSection("mysql") 2 if err !=nil{ 3 fmt.Println("no mysql section config") 4 os.Exit(1) 5 } 6 7 //生成连接mysql dsn 8 fillDns(mysqlConfig) 9 10 //连接mysql 11 db,err := sql.Open("mysql",dns) 12 if err != nil { 13 panic(err.Error()) 14 } 15 defer db.Close() 16 17 //连接超时 18 db.SetConnMaxLifetime(10*time.Second) 19 //最大连接数 20 db.SetMaxOpenConns(100) 21 //连接空闲数 22 db.SetMaxIdleConns(16)
三,CURD操作
INSERT DATA
1 rows,err := db.Exec("insert into user(name,age) values('test',4)") 2 if err !=nil{ 3 fmt.Printf("insert failed:%v\n",err) 4 return 5 } 6 lastinsertid,_ := rows.LastInsertId() 7 affectedrows,_ := rows.RowsAffected()
SELECT DATA
1 stmtout,err := db.Prepare("select name,age from user where id=?") 2 if err!=nil{ 3 log.Fatalf(err.Error()) 4 } 5 defer stmtout.Close() 6 user := new(User) 7 err = stmtout.QueryRow(2).Scan(&user.name,&user.age) 8 if err !=nil{ 9 log.Fatalf(err.Error()) 10 } 11 fmt.Println(user.name,user.age)
UPDATE DATA
1 result,err := db.Exec("UPDATE user set age=? where id=?",20,1) 2 if err != nil{ 3 fmt.Printf("Insert failed,err:%v",err) 4 return 5 } 6 rowsaffected,err := result.RowsAffected()
DELETE DATA
1 result,err := db.Exec("delete from user where id=?",1) 2 if err !=nil { 3 log.Fatalf(err.Error()) 4 } 5 fmt.Println(result.RowsAffected())
四,总结
其实对DB的操作和其它语言都类似的,也可以事物,PREPARE预处理SQL等,有一点不太一样,就是其它语言基本不用再次声明对DB操作的结果,可以自动转换,GO中还要壹声明结构体,变更等来接收从DB取出来的数据。
学习了配置,学习了基本连接MYSQL,未完待续。
PHP中常见的问题点,知识点,及盲点。