mysql:获取最后一个插入的主键而不自动递增

qc6wkl3g  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(381)

我删除了我的记录id,而我使用唯一哈希作为primpary键。这个主键显然不能自动递增。
现在我的问题是如何检索最后插入的主键?mysql在上返回0 LAST_INSERT_ID() 但它不是自动递增列。

i2loujxw

i2loujxw1#

事实

没有等价于 LAST_INSERT_ID() 返回非整数值。

你可以简单地

简单的方法
添加一个整数列,该列可以是自动递增的,也可以是非自动递增的。
要使它正确地自动递增,至少要在mysql本身中实现一个算法,或者用自己选择的语言用新的id填充现有的记录。
更复杂的方法
https://stackoverflow.com/a/53481729/2323764 (@kellymandem)
添加第二个表来管理id,并由没有id的原始表触发。

一个人不能

我发现这个很有前途的问答。
有没有办法在mysql中获取非自动递增列的最后一个插入id?
上面提到了 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

非整数值将被忽略。

zvms9eto

zvms9eto2#

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

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;

获取最近插入的哈希。

相关问题