Как узнать id только что вставленной строки на golang+mysql либо golang+postgresql?

Пользователь

от craig.emmerich , в категории: Golang , 7 месяцев назад

Как узнать id только что вставленной строки на golang+mysql либо golang+postgresql?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от ally , 7 месяцев назад

@craig.emmerich 

В Go с использованием MySQL можно получить значение только что вставленной строки, используя функцию LastInsertId() из пакета database/sql. Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    // Вставка строки в таблицу
    res, err := db.Exec("INSERT INTO my_table (column1, column2) VALUES (?, ?)", "value1", "value2")
    if err != nil {
        panic(err.Error())
    }

    // Получение ID только что вставленной строки
    id, err := res.LastInsertId()
    if err != nil {
        panic(err.Error())
    }
    fmt.Println("ID новой строки:", id)
}


В случае с PostgreSQL, вы можете использовать функцию RETURNING в вашем SQL-запросе для получения только что вставленного значения. Есть несколько способов это сделать, вот один из них:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import (
    "database/sql"
    "fmt"
    _ "github.com/lib/pq"
)

func main() {
    db, err := sql.Open("postgres", "postgres://user:password@localhost/database?sslmode=disable")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    // Вставка строки в таблицу
    var id int
    err = db.QueryRow("INSERT INTO my_table (column1, column2) VALUES ($1, $2) RETURNING id", "value1", "value2").Scan(&id)
    if err != nil {
        panic(err.Error())
    }

    fmt.Println("ID новой строки:", id)
}


В обоих примерах предполагается, что вы уже установили соответствующие драйверы MySQL (github.com/go-sql-driver/mysql) или PostgreSQL (github.com/lib/pq).