【问题标题】:INSERT and then SELECT the inserted rowINSERT 然后选择插入的行
【发布时间】:2014-10-01 13:05:20
【问题描述】:

我的表结构,表名- user_tb

User_Id  Name      Mob_No   City
=================================
100      Sumith    34542    dfsc
101      Yadhu     35485    dfgd
102      Aby       34234    jhhg

这里的列 User_Id 是 auto_increment 并使用此查询向该表插入值,

insert into user_tb(Name,Mob_No,City) values('Yadhu',34542,'dfsc');

我需要在插入时获取 Person 的 User_Id 即,当我使用此查询插入时,

insert into user_tb(Name,Mob_No,City) values('Yadhu',34542,'dfsc');

我需要获取 User_id-101 这可能吗....

请任何人帮我完成这个。

【问题讨论】:

  • 假设你使用的是java,你可以在java中使用preparedstatement
  • 为什么不在插入提交后做一个选择语句? Select max(User_Id) from user_tb?
  • 使用LAST_INSERT_ID()。有关更多信息,请参阅 MySQL 文档dev.mysql.com/doc/refman/5.0/en/…

标签: mysql select insert


【解决方案1】:

在 Mysql 中:使用 LAST_INSERT_ID() 函数; http://dev.mysql.com/doc/refman/5.0/en/mysql-insert-id.html

如果是 PHP:使用 mysql_insert_id() 获取查询插入的最后一个 id。 http://php.net/manual/en/function.mysql-insert-id.php

【讨论】:

  • OP 有没有提到 .. 他在寻找 PHP 的答案?不过我没看到。
  • 我的错误,我想我假设,在我的答案中添加了 mysql 选项
【解决方案2】:

在INSERT 语句之后获取使用AUTO_INCREMENT 的列的值可以通过多种不同的方式来实现。要在 INSERT 之后立即获取值,请使用带有 LAST_INSERT_ID() 函数的 SELECT 查询。

例如,使用连接器/ODBC,您将执行两条单独的语句,即 INSERT 语句和 SELECT 查询以获取自动增量值。

insert into user_tb(Name,Mob_No,City) values('Yadhu',34542,'dfsc');
SELECT LAST_INSERT_ID();

如果您的应用程序中不需要该值,但确实需要该值作为另一个 INSERT 的一部分,则可以通过执行以下语句来处理整个过程:

insert into user_tb(Name,Mob_No,City) values ('Yadhu',34542,'dfsc');
insert into tbl2 (id,text) VALUES (LAST_INSERT_ID(),'text');

【讨论】:

  • 上述行为是否是原子的(不受竞态条件影响)?
  • 这取决于您处理查询的方式。 MySQL 将为每个连接命名,这意味着 LAST_INSERT_ID() 的上下文仅限于该特定连接 - 因此创建 AUTO_INCREMENT 值的其他连接不会影响/了解您的连接的 LAST_INSERT_ID() 值。由于 MySQL 将按顺序处理您的查询,只要您正确排序它们,它就不会产生竞争条件。但是,如果您将生成 AUTO_INCREMENT 的查询和使用 LAST_INSERT_ID() 的查询分开到单独的连接中,那么您就会遇到问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 2016-03-19
相关资源
最近更新 更多