MySQL:获取上次插入的主键,不带auto_increment

MySQL: Get last inserted primary key without auto_increment

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

现在我的问题是如何检索最后插入的主键? MySQL returns LAST_INSERT_ID() 上的 0 而不是自动递增列。

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

例如

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 上每次插入后,我可以 运行 以下查询

SELECT hash FROM hash_tracker ORDER BY created_at DESC LIMIT 1;

获取最近插入的哈希值。

事实

没有等同于 LAST_INSERT_ID() 返回非整数值的方法。

一个人可以简单地

  1. 简单的方法

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

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

  1. 更复杂的方法

(@kellymandem)

添加第二个 table 管理 ID 并由没有 ID 的来源 table 触发。

不能

我觉得这很有前途 Q/A。

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

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

但是

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

非整数值将被忽略。