【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, '[email protected]'),
        ('李四', 22, '[email protected]');

# 查询数据
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

各部分解释:

  1. username:password:数据库的用户名和密码
  2. @protocol(address) :指定连接协议和数据库服务器的地址。
  3. /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)
}

猜你喜欢

转载自blog.csdn.net/2301_77868664/article/details/143354427