【Gorm】传统sql的增删查改,通过go去操作sql
MySQL中的建库,建表,删库,删表,添加记录,查询,删除记录,更新记录这些命令是一定要回的,就算我们脱离 orm 这些,也能直接连接上数据库进行操作。
一、数据库的操作
# 查询全部的数据库
show databases;
# 创建数据库,并制定字符集和排序方式
create database grom_new_db
characeter set utf8mb4
collate 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 = innodb
default charset = utf8mb4
collate = 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 int
var 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 int
var name string
// 这里scan的字段要对上
err = db.QueryRow("select id, name from users").Scan(&id, &name)
fmt.Println(id, name, err)
}