本篇文章主要内容是 Mysql 基础以及 Go 如何操作 MySql 数据库。
Mysql 基础
在你的终端输入如下代码:
/usr/local/mysql/bin/mysql -u root -p
执行命令之后,输入你的 Mysql 数据库密码,成功之后显示:
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 5.7.17 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
创建 test 数据库:
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
显示所有存在的数据库:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| DB |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
6 rows in set (0.00 sec)
可以看到 test 数据库已经成功创建。接下来我们在 test 数据库创建两张表:userinfo 和 userdetail。首先切换到 test 数据库。我们先看看当前正在使用的数据库:
mysql> select database()
-> ;
+------------+
| database() |
+------------+
| test |
+------------+
1 row in set (0.00 sec)
切换操作:
mysql> use test;
Database changed
如上,我们就成功切换到 test 数据库中了,接下来我们创建两张表啦:
mysql> CREATE TABLE `userinfo` (
-> `uid` INT(10) NOT NULL AUTO_INCREMENT,
-> `username` VARCHAR(64) NULL DEFAULT NULL,
-> `departname` VARCHAR(64) NULL DEFAULT NULL,
-> `created` DATE NULL DEFAULT NULL,
-> PRIMARY KEY (`uid`)
-> );
mysql> CREATE TABLE `userdetail` (
-> `uid` INT(10) NOT NULL DEFAULT '0',
-> `intro` TEXT NULL,
-> `profile` TEXT NULL,
-> PRIMARY KEY (`uid`)
-> );
Query OK, 0 rows affected (0.02 sec)
查看表是否显示成功:
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| userdetail |
| userinfo |
+----------------+
2 rows in set (0.00 sec)
我们想看看所建表的结构的话:
mysql> desc userinfo;
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| uid | int(10) | NO | PRI | NULL | auto_increment |
| username | varchar(64) | YES | | NULL | |
| departname | varchar(64) | YES | | NULL | |
| created | date | YES | | NULL | |
+------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
向表中插入数据,并显示出来:
mysql> insert into userdetail VALUES ('2','Hello world', "I am allenuw");
Query OK, 1 row affected (0.00 sec)
mysql> select * from userdetail;
+-----+-------------+--------------+
| uid | intro | profile |
+-----+-------------+--------------+
| 2 | Hello world | I am allenuw |
+-----+-------------+--------------+
1 row in set (0.00 sec)
上面就是 Mysql 数据表最基本的操作了,还有很多要学习,其他的话大家 Google 一下就好了。接下来我们讲述 Go 中如何操作 Mysql 数据库。
Golang 操作 Mysql
Go没有内置的驱动支持任何的数据库,但是Go定义了database/sql接口,用户可以基于驱动接口开发相应数据库的驱动。这一节来尝试与喜爱 mysql 的驱动
go get github.com/go-sql-driver/mysql
安装好 mysql 驱动之后,我们按照上述的步骤在终端创建两张表分别是:userinfo 和 userdetail。接下来看看 Go 官方提供的示例代码:
packagemainimport("database/sql""fmt"_"github.com/go-sql-driver/mysql"//"time")funcmain(){db,err:=sql.Open("mysql","root:123456@/test?charset=utf8")checkErr(err)//插入数据stmt,err:=db.Prepare("INSERT userinfo SET username=?,departname=?,created=?")checkErr(err)res,err:=stmt.Exec("astaxie","WeChat","2012年12月09日")checkErr(err)id,err:=res.LastInsertId()checkErr(err)fmt.Println(id)//更新数据stmt,err=db.Prepare("update userinfo set username=? where uid=?")checkErr(err)res,err=stmt.Exec("astaxieupdate",id)checkErr(err)affect,err:=res.RowsAffected()checkErr(err)fmt.Println(affect)//查询数据rows,err:=db.Query("SELECT * FROM userinfo")checkErr(err)forrows.Next(){varuidintvarusernamestringvardepartmentstringvarcreatedstringerr=rows.Scan(&uid,&username,&department,&created)checkErr(err)fmt.Println(uid)fmt.Println(username)fmt.Println(department)fmt.Println(created)}//删除数据stmt,err=db.Prepare("delete from userinfo where uid=?")checkErr(err)res,err=stmt.Exec(id)checkErr(err)affect,err=res.RowsAffected()checkErr(err)fmt.Println(affect)db.Close()}// 存在 error 进行 paincfunccheckErr(errerror){iferr!=nil{panic(err)}}输出结果如下所示:
[ `go run mysql_demo.go` | done: 345.222169ms ]
1
1
1
astaxieupdate
WeChat
2012年12月09日
1
Beego 进行 ORM
ORM 是一种对象关系的映射。接下来体验一下 Beego 中内部支持的 ORM。我们还是先来安装 beego 框架。
gogetgithub.com/astaxie/beegopackagemainimport("fmt""github.com/astaxie/beego/orm"_"github.com/go-sql-driver/mysql"// 导入数据库驱动)// Model StructtypeUserstruct{IdintNamestring`orm:"size(100)"`}funcinit(){// 设置默认数据库orm.RegisterDataBase("default","mysql","root:root@/my_db?charset=utf8",30)// 注册定义的 modelorm.RegisterModel(new(User))//RegisterModel 也可以同时注册多个 model//orm.RegisterModel(new(User), new(Profile), new(Post))// 创建 tableorm.RunSyncdb("default",false,true)}其中第二个 root是你的本地 Mysql 数据库密码,而 my_db 就是你的数据库名称。下面是一些常用的操作:
funcmain(){o:=orm.NewOrm()// 基本的赋值user:=User{Name:"slene"}// 插入表id,err:=o.Insert(&user)fmt.Printf("ID: %d, ERR: %v\n",id,err)// 更新表user.Name="astaxie"num,err:=o.Update(&user)fmt.Printf("NUM: %d, ERR: %v\n",num,err)// 读取 oneu:=User{Id:user.Id}err=o.Read(&u)fmt.Printf("ERR: %v\n",err)// 删除表num,err=o.Delete(&u)fmt.Printf("NUM: %d, ERR: %v\n",num,err)}如上可见,我们基本上没有直接对 Mysql 数据库进行操作,而是通过一个实体类型来对数据库某个表进行各种操作。