如何在MySQL和Go中获取最后插入行的ID?

huangapple go评论89阅读模式
英文:

How to get ID of the last inserted row in MySQL and Go?

问题

你可以使用以下的代码来在Go中实现这个技巧:

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

func getLastUpdatedRowID(db *sql.DB) (int64, error) {
    // 执行插入语句
    _, err := db.Exec("INSERT INTO table (unique_id) VALUES (?) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id)", "test")
    if err != nil {
        return 0, err
    }

    // 执行查询语句
    var lastInsertID int64
    err = db.QueryRow("SELECT LAST_INSERT_ID()").Scan(&lastInsertID)
    if err != nil {
        return 0, err
    }

    return lastInsertID, nil
}

在你的代码中,你需要先建立与MySQL数据库的连接,然后调用getLastUpdatedRowID函数来获取最后更新的行的ID。这个函数会执行插入语句并返回最后插入的行的ID。

请确保你已经导入了database/sqlgithub.com/go-sql-driver/mysql包,并且已经正确配置了数据库连接信息。

英文:

How can I use this trick: https://stackoverflow.com/questions/1388025/how-to-get-id-of-the-last-updated-row-in-mysql in Go (golang)?

I am using the go-sql-driver. It should work with these two queries but how can I do it in Go?

INSERT INTO table (unique_id) VALUES ("test")
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id);

SELECT LAST_INSERT_ID();

答案1

得分: 33

工作解决方案。就是这么简单。我希望其他人也会发现这个有用:

stmt, err := db.Prepare("INSERT table SET unique_id=? ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id)")

res, err := stmt.Exec(unique_id)

lid, err := res.LastInsertId()
英文:

Working solution. It is as simple as that. I hope someone else will find this useful:

stmt, err := db.Prepare("INSERT table SET unique_id=? ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id)")
	
res, err := stmt.Exec(unique_id)

lid, err := res.LastInsertId()

答案2

得分: 1

尝试以下内容的翻译:

尝试以下内容:

更新 items
设置 qwe = 'qwe',
    item_id = LAST_INSERT_ID(item_id)
当 asd = 'asd' 时;
选择 LAST_INSERT_ID();
英文:

Try following:

UPDATE items
SET qwe = 'qwe',
    item_id=LAST_INSERT_ID(item_id)
WHERE asd = 'asd';
SELECT LAST_INSERT_ID();

huangapple
  • 本文由 发表于 2017年5月23日 06:52:40
  • 转载请务必保留本文链接:https://go.coder-hub.com/44123276.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定