我有一个表格,其中以下是列及其数据类型
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'插入第二行后。
答案 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并更新它。