在我的一个项目中,我必须从数据库中获取最后插入的 ID,以便我可以将新插入的数据与内存中的数据同步,而无需执行SELECT * FROM my_db;
查询,即我正在做一个SELECT * FROM my_db WHERE id=new_index
.
现在,我知道我正在使用的MySQL支持查询select last_insert_id();
,所以我想我只需发出该命令并执行它即可。但在深入研究 C#(我用于该项目的编程语言)后,我发现MySqlCommand
has a LastInsertedId
field.
现在令我困惑的是,我期望该领域的吸气剂也能做同样的事情select last_insert_id();
查询,但是在查看 MySQL 的日志时,我发现根本没有进行这样的查询。
所以我的问题是,如何MySqlCommand.LastInsertedId
当MySQL服务器自动生成ID时,知道我插入的元组被分配了什么ID吗?
当 MySQL 服务器在 UPDATE 查询后响应客户端软件(在您的情况下是 Connector/Net)时,它会发送一个所谓的OK_Packet通过 TCP(或套接字)连接 https://dev.mysql.com/doc/internals/en/packet-OK_Packet.html。该数据包包含last_insert_id 值。
在服务器上,任何 INSERT 查询都可以使用它,无需其他查询,因此线路协议处理程序只需将其放入响应数据包中。
客户端软件从数据包中提取该值并将其呈现给您的应用程序软件最后插入的ID https://dev.mysql.com/doc/dev/connector-net/html/P_MySql_Data_MySqlClient_MySqlCommand_LastInsertedId.htm财产。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)