Mysql: 可能获得最后插入的ID?

创建于 2013-06-11  ·  6评论  ·  资料来源: go-sql-driver/mysql

执行插入后,可以获取最后插入的ID吗? 这是mysql的一个很常见的功能

question

最有用的评论

只需使用db.Exec并从结果中获取最后插入的ID。

通常,每个CREATE / INSERT / UPDATE / DELETE都应使用db.Exec。

package main

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "user:pass@/dbname")
    if err != nil {
        panic("Error opening DB:", err.Error())
    }
    defer db.Close()

    someParam := "value"

    if res, err := db.Exec(`INSERT INTO foo VALUES("bar", ?))`, someParam)
    if err != nil {
        println("Exec err:", err.Error())
    } else {
        id, err := res.LastInsertId()
        if err != nil {
            println("Error:", err.Error())
        } else {
            println("LastInsertId:", id)
        }
    }
} 

也可以看看:
http://golang.org/pkg/database/sql/#DB.Exec
http://golang.org/pkg/database/sql/#Result

所有6条评论

只需使用db.Exec并从结果中获取最后插入的ID。

通常,每个CREATE / INSERT / UPDATE / DELETE都应使用db.Exec。

package main

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "user:pass@/dbname")
    if err != nil {
        panic("Error opening DB:", err.Error())
    }
    defer db.Close()

    someParam := "value"

    if res, err := db.Exec(`INSERT INTO foo VALUES("bar", ?))`, someParam)
    if err != nil {
        println("Exec err:", err.Error())
    } else {
        id, err := res.LastInsertId()
        if err != nil {
            println("Error:", err.Error())
        } else {
            println("LastInsertId:", id)
        }
    }
} 

也可以看看:
http://golang.org/pkg/database/sql/#DB.Exec
http://golang.org/pkg/database/sql/#Result

谢谢先生!

    if err == nil {
        println("LastInsertId:", id)
    } else {
        println("Error:", err.Error())
    }

错别字。 我修复了上面的代码。 谢谢!

如何转换int而不是int64?

strconv.Itoa(id) => cannot use id (type int64) as type int in argument to strconv.Itoa

这是一个一般的Go新手问题。 不要在这里问这样的问题。

此页面是否有帮助?
0 / 5 - 0 等级