当前位置: 首页 > article >正文

【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

各部分解释:

  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)
}


http://www.kler.cn/a/371785.html

相关文章:

  • 基于springboot+vue实现的公考知识学习平台 (源码+L文+ppt)4-103
  • 浏览器HTTP缓存解读(HTTP Status:200 304)
  • leetcode57:插入区间
  • 软件系统安全保证措施,质量保证措施方案(Word原件套用)
  • 嵌入式学习-网络-Day03
  • 鸿蒙学习总结
  • STM32 I2C通信:硬件I2C与软件模拟I2C的区别
  • 数据库OCP 19C要考哪两门
  • 【学习】ZLMediaKit试用
  • 利用前向勾子获取神经网络中间层的输出并将其进行保存(示例详解)
  • shodan5,参数使用,批量查找Mongodb未授权登录,jenkins批量挖掘
  • QT编辑框带行号
  • 迷你航拍高清智能无人机技术详解
  • 云服务器和物理服务器有区别吗?
  • docker使用简介
  • 【WRF数据处理】基于GIS4WRF插件将geotiff数据转为tiff(geogrid,WPS所需数据)
  • AI Agents - 自动化项目:计划、评估和分配
  • JAVA的设计模式都有那些
  • ppt演示如何计时?分享2个ppt使用技巧,轻松搞定ppt计时!
  • STM32 从0开始系统学习4 编写LED驱动
  • 基于Java语言的充电桩管理系统
  • DICOM标准:DICOM服务类详解,了解存储服务类、查询/检索服务类(Q/R Service Class)和工作流管理服务类等原理
  • 无人机协同控制技术详解!
  • pdf免费压缩软件 pdf文件压缩免费软件 软件工具方法
  • 人类借助AI发现第 52 个梅森素数
  • cloak斗篷伪装下的独立站