如何获取最后插入行的id

时间:2014-05-19 12:37:56

标签: c# mysql

我有一个表格,其中以下是列及其数据类型

id=>AI,PK,int(11)
param_id=>varchar(45)
type=>varchar(45)
stationname=>varchar(45)
param=>varchar(45)

现在当我在数据库中插入一行时:(数据库是MySQL,编程语言c#)

insert into param_reference (Param_Id,Type,StationName,Param) values ('Res','" + Type + "','" + damName + "','maxQ')"

表格中的行如下:

'1', 'Res', 'Reservoirs', 'B', 'maxQ'

param_id必须像' Res1'其中1是自动生成的id。 但是当我们插入这一行时,我们无法插入' Res1' coz id未知,我们只有在插入后才能获得。 插入上面的行后,我确实尝试了

select id from param_reference where Type='" + Type + "',StationName='" + damName + "',Param='maxQ',Param_id='Res'

但它总是返回null,它不返回id。 我怎么解决这个问题? 如何在插入id后立即获取id。 它也应该是插入的最后一个id,因为可以有许多行,如:

'1', 'Res', 'Reservoirs', 'B', 'maxQ'
'2', 'Res', 'Reservoirs', 'B', 'maxQ'
'3', 'Res', 'Reservoirs', 'B', 'maxQ'
'4', 'Res', 'Reservoirs', 'B', 'maxQ'

但Res也将拥有id部分..

所以我实际上想要更新' Res'作为' Res2'插入第二行后。

5 个答案:

答案 0 :(得分:5)

这样做的一个小技巧就是将你的陈述改为:

INSERT INTO tbl (...) VALUES (...); SELECT LAST_INSERT_ID()

然后插入ExecuteScalar行,这将返回id;然后,您可以相应地更新对象。因此,整个代码段可能如下所示:

using (var conn = new MySqlConnection(connString))
using (var cmd = new MySqlCommand(sql, conn))
{
    var result = cmd.ExecuteScalar();
    int id;
    if (int.TryParse(result, out id))
    {
        // set the object's id here
    }
}

答案 1 :(得分:1)

尝试在MySQL中查找last_insert_id()函数。

答案 2 :(得分:1)

@ MichaelPerrenoud的回答是对的。但是,如果您想要合并条件或在另一个查询中使用LAST_INSERT_ID(),您应该查看以下链接:

How to Get the Unique ID for the Last Inserted Row

以下是参考文献摘录:

  

对于 LAST_INSERT_ID(),将保留最近生成的ID   服务器基于每个连接。它不会被另一个人改变   客户。如果您更新另一个AUTO_INCREMENT,它甚至不会更改   具有非魔法值的列(即,非NULL和值的值)   不是0)。使用LAST_INSERT_ID()和AUTO_INCREMENT列   同时来自多个客户端是完全有效的。每个客户   将收到客户端最后一条语句的最后插入ID   执行。

     

如果将记录插入包含AUTO_INCREMENT的表中   专栏,你可以获得   通过调用 mysql_insert_id()函数存储到该列中的值。

答案 3 :(得分:0)

试试这个:

select max(id) from table

答案 4 :(得分:0)

您可以从表中获取最大ID: SELECT MAX(id) FROM param_reference

然后将结果追加到Res并更新它。