• golang中的MySQL增删改查


    准备测试数据:

    1. 创建一个名为test的数据库
    CREATE DATABASES test;
    
    1. 使用该数据库:
    use test;
    
    1. 新建一个表格:
    CREATE TABLE `user` (
        `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
        `name` VARCHAR(20) DEFAULT '',
        `age` INT(11) DEFAULT '0',
        PRIMARY KEY(`id`)
    )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
    

    增:

    表格中新增一个数据:

    使用sql语句:

    sql添加数据的语句:

    INSERT INTO table_name ( field1, field2,...fieldN )
                           VALUES
                           ( value1, value2,...valueN );
    
    • table_name: 目标对象,数据将会添加到这个表格。
    • field: 属性列表,该属性必须是表格中存在的属性。
    • value: 属性值列表,属性值列表必须与属性列表顺序对应

    在golang中:

    增删改查其实都只是将数据和SQL语句传入,基本流程都是差不多的,只是使用的SQL语句和在golang中对应的函数不同。

    func insertRow() {
            // sql的插入语句
    	sqlStr := "INSERT INTO user(name, age) VALUES (?,?)"
            // 将sql语句与数据同时传入
    	if ret, err := db.Exec(sqlStr, "王五", 38); err != nil {
                fmt.Printf("insert failed, err:%v
    ", err)
    	    return
    	}
    }
    

    查询分为单查询和多查询

    单查询

    // 定义接受数据的结构体
    type user struct {
    	id   int
    	age  int
    	name string
    }
    
    // 单查询
    func queryRow() {
    	sqlStr := "select id, name, age from user where id=?"
    	var u user
    	// 非常重要:确保QueryRow之后调用Scan方法,否则持有的数据库链接不会被释放
    	if err := db.QueryRow(sqlStr, 1).Scan(&u.id, &u.name, &u.age); err != nil {
    		fmt.Printf("scan failed, err:%v
    ", err)
    		return
    	}
    	fmt.Printf("id:%d name:%s age:%d
    ", u.id, u.name, u.age)
    }
    

    多查询:

    多查询与单查询的差异主要在于结果,单查询的结果返回的是单一结果,而多查询的结果返回的是结果列表,需要使用循环读取所有结果。

    func queryMultiRow() {
    	sqlStr := "select id, name, age from user where id > ?"
    	rows, err := db.Query(sqlStr, 0)
    	if err != nil {
    		fmt.Printf("query failed, err:%v
    ", err)
    		return
    	}
    	// 非常重要:关闭rows释放持有的数据库链接
    	defer rows.Close()
    
    	// 循环读取结果集中的数据
    	for rows.Next() {
    		var u user
    		err := rows.Scan(&u.id, &u.name, &u.age)
    		if err != nil {
    			fmt.Printf("scan failed, err:%v
    ", err)
    			return
    		}
    		fmt.Printf("id:%d name:%s age:%d
    ", u.id, u.name, u.age)
    	}
    }
    

    func updateRow() {
    	sqlStr := "update user set age=? where id = ?"
    	ret, err := db.Exec(sqlStr, 39, 3)
    	if err != nil {
    		fmt.Printf("update failed, err:%v
    ", err)
    		return
    	}
    	n, err := ret.RowsAffected() // 操作影响的行数
    	if err != nil {
    		fmt.Printf("get RowsAffected failed, err:%v
    ", err)
    		return
    	}
    	fmt.Printf("update success, affected rows:%d
    ", n)
    }
    

    func deleteRow() {
    	sqlStr := "delete from user where id = ?"
    	ret, err := db.Exec(sqlStr, 3)
    	if err != nil {
    		fmt.Printf("delete failed, err:%v
    ", err)
    		return
    	}
    	n, err := ret.RowsAffected() // 操作影响的行数
    	if err != nil {
    		fmt.Printf("get RowsAffected failed, err:%v
    ", err)
    		return
    	}
    	fmt.Printf("delete success, affected rows:%d
    ", n)
    }
    

    总结:

    总的来说,数据库的增删改查并不难,前提是对于sql语句的增删改查本身有所了解

  • 相关阅读:
    判断ip是内网还是外网, 判断请求来之pc还是mobile
    CentOS6.5(Kernel2.6) Compile PHP5.6
    java设计模式笔记
    Java定时quartz(spring)
    Transforming beans, maps, collections, java arrays and XML to JSON
    java socket通讯交互
    第一个WebService CXF的搭建
    java技术成长之路
    struts2中文乱码
    sql server分页(摘)
  • 原文地址:https://www.cnblogs.com/ltozvxe/p/14577154.html
Copyright © 2020-2023  润新知