使用Mysql检索最后插入的id

81

您好,

我想要获取在Mysql中刚插入的一行的id值。

我知道有 mysqli_insert_id 函数,但是:

  1. 我无法指定表格
  2. 如果同时进行查询,可能会出现获取错误 id 的风险。
  3. 我正在使用 node.js MySQL。

我不想冒险查询最高的id值,因为有很多查询,这可能会给我带来错误。

(我的id列是自动递增的)


你为什么认为必须指定插入的表才能获取ID?你到目前为止尝试了什么来使它工作? - Nico Haase
3个回答

175

2
如果有多个insert语句怎么办? - Qwertiy
2
如果我的主键是非递增类型,我该怎么办?我正在使用uuid作为主键的BINARY(16)类型。 - Raghav Mehta
4
嗨,Raghav,如果你的键不是自增的并且不是由数据库创建的,那么你不应该需要像这样检索它。毕竟,在你的编程逻辑中应该已经有了这个键。如果你遇到困难,我建议你在这里在SO上创建一个独立的问题。 - luksch
4
@luksch uuid() 是 MySQL 的一个函数,创建在数据库中。在调用插入语句之前,它并不知道 uuid 是什么。 - mattdevio
当我使用console.log(result.insertId)时,它工作得很好。但是当我使用response.send(result.insertId)时,它会抛出错误。为什么会这样? - Sweety
显示剩余6条评论

12
var table_data =  {title: 'test'};

connection_db.query('INSERT INTO tablename SET ?', table_data , function(err, result, fields) {
  if (err) {
      // handle error
    }else{
       // Your row is inserted you can view  
      console.log(result.insertId);
    }
});

您也可以通过访问此链接 https://github.com/mysqljs/mysql#getting-the-id-of-an-inserted-row 查看。


-2

我认为你误解了mysqli_insert_id()方法的使用。这个方法必须在插入语句立即执行后才能获取最后插入的id。如果你直接在MySQL中执行,就会出现问题。

INSERT INTO(a,b)values(1,'test');
SELECT LAST_INSERT_ID();  -- this will display the last inserted id

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接