在mysql中插入后获取最后一个ID

时间:2016-03-13 06:58:21

标签: mysql

如何获取最后一个插入语句的ID

我使用触发器为每条记录创建一个ID

INSERT INTO table1_seqdocument VALUES (NULL);
  SET NEW.tracknum = CONCAT('DOC', LPAD(LAST_INSERT_ID(), 3, '0'));

我需要其他表的ID

这是我的插入声明

INSERT INTO tble_transaction
  (
      tracknum 
     ,signatoryid
     ,signed
     ,status
     ,signatorylevel
  )
  VALUES 
     (?,?,?,?,? )

我想要的是检索ID并将其用于另一个插入语句,但使用其他表。可能吗?谢谢

2 个答案:

答案 0 :(得分:0)

您可以使用@@ identity

SELECT @@IDENTITY AS [@@IDENTITY];

答案 1 :(得分:0)

LAST_INSERT_ID()只能告诉您整个数据库连接最近自动生成的ID的ID,而不是每个单独的表,这也是查询应该只读取SELECT LAST_INSERT_ID()的原因 - 而不指定表。一旦在该连接上触发另一个INSERT查询,它就会被覆盖。如果在插入某个表时需要生成的ID,则必须在执行此操作后立即运行SELECT LAST_INSERT_ID()(或使用一些为您执行此操作的API函数)。

如果您想要当前在任意表中的最新ID,您必须在该表上执行SELECT MAX(id),其中id是您的ID列的名称。但是,这不一定是最近生成的ID,如果该行已被删除,也不一定是从您的连接生成的,以防另一个连接设法在您自己的INSERT和您选择的ID之间执行INSERT。

(对于记录,您的查询实际上返回包含该数据库连接上最近生成的ID的N行,其中N是table1中的行数。)