在我的一个项目中,我必须从数据库中获取最后插入的ID,以便无需SELECT * FROM my_db;查询即可将新插入的数据与内存中的数据同步,即我正在执行SELECT * FROM my_db WHERE id=new_index。
SELECT * FROM my_db;
SELECT * FROM my_db WHERE id=new_index
现在,我知道我正在使用的MySQL支持该查询select last_insert_id();,因此我认为只需执行该命令即可。但是,在深入研究C#(我用于该项目的编程语言)后,我发现那里MySqlCommand有一个LastInsertedId领域。
select last_insert_id();
MySqlCommand
LastInsertedId
现在令我感到困惑的是,我期望该字段的getter会执行相同的select last_insert_id();查询,但是在查看来自MySQL的日志时,我根本看不到有这样的查询。
所以我的问题是,MySqlCommand.LastInsertedId当MySQL服务器自动生成ID时,我怎么知道该ID分配给我要插入的元组?
MySqlCommand.LastInsertedId
当MySQL服务器在UPDATE查询后响应客户端软件(在您的情况下为Connector / Net)时,它将通过tcp(或套接字)连接发送所谓OK_Packet的信息。该数据包包含last_insert_id值。
OK_Packet
在服务器上,它可用于任何INSERT查询,而无需其他查询,因此,有线协议处理程序会将其放入响应包中。
客户端软件从数据包中提取该值,然后通过LastInsertedId属性将其提供给您的应用程序软件。