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()
返回非整数值的方法。
一个人可以简单地
- 简单的方法
添加一个可以自动递增或非自动递增的整数列。
要使其正确自动递增,至少必须在 MySQL 本身或使用他们选择的语言来实现一种算法,以用新 ID 填充现有记录。
- 更复杂的方法
(@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
非整数值将被忽略。
我在使用唯一哈希作为主键时删除了我的记录 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()
返回非整数值的方法。
一个人可以简单地
- 简单的方法
添加一个可以自动递增或非自动递增的整数列。
要使其正确自动递增,至少必须在 MySQL 本身或使用他们选择的语言来实现一种算法,以用新 ID 填充现有记录。
- 更复杂的方法
添加第二个 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
非整数值将被忽略。