mysql - 如何仅在 Golang 的表中不可用时插入元组?

标签 mysql go insert duplicates

在我的用例中,我想编写一个函数,在 Golang 中的表中插入一行,如果该行不可用的话。我正在使用 MySql 和 github.com/go-sql-driver/mysql .尝试通过此函数插入​​时出现错误。但我可以通过 MySql 控制台运行来插入。这是函数定义,

    func AddTag(t *objects.Tag) {

    //Get connection object
    db, err := GetDBConnection()
    defer db.Close()

    // Prepare statement for inserting data
    stmtIns, err := db.Prepare("INSERT INTO tag (tag_id, tag_name, metatag_id) SELECT * FROM (SELECT NULL, ?, ?) AS tmp WHERE NOT EXISTS ( SELECT tag_name FROM tag WHERE tag_name = ? ) LIMIT 1")
    if err != nil {
        fmt.Println("FATAL  ", time.Now(), "Error in prepare statement for Tag insert ")
        panic(err.Error()) 
    }

    defer stmtIns.Close()                         // Close the statement when we leave main() / the program terminates
    _, err = stmtIns.Exec(t.TagName, t.MetaTagId, t.TagName) // Insert tuples

    if err != nil {
        fmt.Println("FATAL  ", time.Now(), "Error in insert to Tag ")
        panic(err.Error()) 
    }

  }

编辑 1 : 我收到以下错误,

FATAL    2015-06-14 17:13:15.631487042 -0700 PDT Error in insert to Tag
panic: Error 1136: Column count doesn't match value count at row 1

goroutine 1 [running]:
main.AddTag(0x1112e1a0, 0x0, 0x0)

谁能帮我解决这个问题?谢谢

最佳答案

“列计数与值计数不匹配”意味着您没有为表中没有默认值的列提供值。

检查您的表架构(DESCRIBE 标记;)并确保您为其他列提供值,或者它们具有默认值。

关于mysql - 如何仅在 Golang 的表中不可用时插入元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30835388/

相关文章:

go - 如何通过 Gin 的上下文传递 context.Context?

java - 插入已排序的链表 - Java

c++ - 如何在 vector 的开头插入元素

mysql - 扩展行集的平均计算

MySQL 子查询返回超过 1 行。如何查找子查询?

mysql - 将具有相同字段的两个表连接到多个列

php - Mysql 添加简单排名表

sockets - 从 Socket Golang 读取数据

go - 在 Go 中,如何检查接口(interface)是否实现了结构的所有导出方法?

c++ - 我可以使用 tie 将一对元素放入 vector 中吗?