MySQL:获取没有auto_increment的最后插入的主键

时间:2018-11-26 12:02:07

标签: mysql last-insert-id

我在使用唯一哈希作为主键时删除了记录ID。这个主键显然不能自动递增。

现在我的问题是如何获取最后插入的主键? MySQL在LAST_INSERT_ID()上返回0时,它不是自动递增列。

2 个答案:

答案 0 :(得分:0)

我认为您的问题最好通过创建一个新表和一个触发器来跟踪主表中新插入的哈希值来解决。

例如

footer

然后在每次插入CREATE TABLE test_table ( hash VARCHAR(30) NOT NULL PRIMARY KEY, fullname VARCHAR(120) NOT NULL ); CREATE TABLE hash_tracker( hash VARCHAR(30) NOT NULL, created_at DATETIME NOT NULL ); DELIMITER $$ CREATE TRIGGER `test_trigger` AFTER INSERT ON `test_table` FOR EACH ROW BEGIN INSERT INTO hash_tracker VALUES (NEW.`hash`, NOW()); END$$ DELIMITER ; 后,我可以运行以下查询

test_table

获取最新插入的哈希。

答案 1 :(得分:0)

事实

没有等效于LAST_INSERT_ID()返回一个非整数值。

一个人可以简单

  1. 简单的方法

添加一个整数列,该列可以自动递增或非自动递增。

要使其正确正确地自动递增,至少必须在MySQL本身中或使用他们选择的语言来实现一种算法,以用新ID填充现有记录。

  1. 更复杂的方法

https://stackoverflow.com/a/53481729/2323764(@kellymandem)

添加第二个表来管理ID,并由没有ID的原始表触发。

一个不能

我发现这个非常有前途的问题。

Is there a way to get last inserted id of a NON - auto incremented column in MySQL?

这里提到已经在LAST_INSERT_ID()语句中使用INSERT

但是

INSERT INTO `table` ( `non_integer_column` ) VALUES ( LAST_INSERT_ID( 42 ) );
SELECT LAST_INSERT_ID( );
-> 42
INSERT INTO `table` ( `non_integer_column` ) VALUES ( LAST_INSERT_ID( 'a0b1c2d3e4f5' ) );
SELECT LAST_INSERT_ID( );
-> 0

非整数值将被忽略。