MySQL中的建库,建表,删库,删表,添加记录,查询,删除记录,更新记录这些命令是一定要回的,就算我们脱离 orm 这些,也能直接连接上数据库进行操作。
一、数据库的操作
# 查询全部的数据库
show databases;# 创建数据库,并制定字符集和排序方式
create database grom_new_dbcharaceter set utf8mb4collate utf8mb4_unicode_ci;# 选中数据库
use grom_new_db;# 删除数据库
drop databases grom_new_db;
二、表的操作
# 查询当前库的所有表
show tables;# 建表
create table users(id bigint unsigned auto_increment primary key,name varchar(50) not null default '',age int unsigned not null default 0,email varchar(50) not null default '',create_at datetime default current_timestamp,updata_at datetime default current_timestamp on update current_timestamp
) engine = innodbdefault charset = utf8mb4collate = utf8mb4_unicode_ci;# 插入数据
insert into users (name, age, email)
values ('张三', 18, 'zhangsan@qq.com'),('李四', 22, 'lisi@qq.com');# 查询数据
select * from users;# 删除数据
delete from users where id = 1;# 更新数据
updata users set name = '张三丰', age = 19 where id = 2;# 删除表
drop table users;
三、通过go去操作sql
db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/gorm_new_db")
if err != nil {log.Fatalf("数据库连接失败 %s", err)
}
3.1 安装驱动
go get -u github.com/go-sql-driver/mysql
3.2 连接
在连接数据库的时候,我们需要使用一句连接字符串,格式如下:
username:password@protocol(address)/dbname?param=value
各部分解释:
- username:password:数据库的用户名和密码
- @protocol(address) :指定连接协议和数据库服务器的地址。
- /dbname:要连接的数据库名
3.3 执行sql
我们除了查询语句之后,其他的语句全是使用 Exac 函数,代码如下:
func main()
{// 连接数据库db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/gorm_new_db")if err != nil {log.Fatalf("数据库连接失败 %s", err)}defer db.close()_, err := db.Exec("CREATE TABLE userss1(id INT NOT NULL , name VARCHAR(20), PRIMARY KEY(ID));")if err2 != nil {log.Fatal(err2)}fmt.Println("successfully create table")
}
3.4 查询sql
当使用到查询语句的时候,我们可以使用 Query 函数
func main() {// 连接数据库db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/gorm_new_db")if err != nil {log.Fatalf("数据库连接失败 %s", err) }defer db.close() res, err := db.Query("select id, name from users")for res.Next() {var id intvar name string// 这里 scan 的字段要对上err = res.Scan(&id, &name)fmt.Println(id, name, err)}
}
我们也可以使用 QueryRow 函数去查一行的数据,代码如下:
func main() {// 连接数据库db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/gorm_new_db")if err != nil {log.Fatalf("数据库连接失败 %s", err)}defer db.close()var id intvar name string// 这里scan的字段要对上err = db.QueryRow("select id, name from users").Scan(&id, &name)fmt.Println(id, name, err)
}