我知道LAST_INSERT_ID()如何适用于自动递增的列,但我无法找到一种方法来获取我为非自动递增列插入的最后一个ID。
我有办法做到吗?
答案 0 :(得分:15)
您可以使用相同的LAST_INSERT_ID()
轻松完成此操作。
INSERT INTO thetable (id, value)
VALUES (LAST_INSERT_ID(126), 'some data');
SELECT LAST_INSERT_ID(); -- returns 126
答案 1 :(得分:2)
我假设您希望在插入后稍后检索此最后插入的ID,因为如果您在插入后立即需要它,您显然已经知道id是什么。
您能够获得的唯一方法是在表上添加另一列,指示上次插入哪一行,例如时间戳或日期时间列。如果您的ID是唯一且不断增加的,则可以使用该列。然后,您只需按降序顺序选择该列排序的1行。
例如
INSERT INTO my_table (id, timestamp) VALUES (123, NOW())
SELECT id FROM my_table ORDER BY timestamp DESC LIMIT 1
编辑:根据下面的评论,您最好使用AUTO_INCREMENT列,虽然此列不必是id
列,但您可以添加自动增量{{1} } insert_order
类型的列,只需按此顺序排序。
答案 2 :(得分:1)
我假设您需要ID来查找刚插入的行,而不是找到最后插入的行。在Web应用程序中,您永远无法确定最后插入的行是您刚刚创建的行。
在这种情况下,您可以使用GUID作为ID。 GUID通常存储为长度为36或为16byte的blob的字符串。可以在插入行之前创建GUID,然后在插入行时存储GUID。
由于id未按照您的说明自动递增,因此您必须在插入行之前生成它。最安全的方法是创建一个足够独特的GUID。否则你将不得不确定最后一个未使用的ID,这可能是棘手且有风险的。
答案 3 :(得分:0)
没有
关系没有固有的顺序,没有“最后插入的记录”。这就是AUTO_INCREMENT
字段存在的原因。
您必须查看日志或在应用程序中自行缓存值。
答案 4 :(得分:0)
没有办法使用mysql。但你可以通过编程方式完成它。如果没有自动递增ID列,数据库就无法知道最后插入了哪些记录。
一种方法是使用包含时间戳或日期时间值的列。并获取tmestamp的最新值的id以获取最后插入的记录
答案 5 :(得分:0)
如果要获取自定义的last_inserted ID,则必须实现一个过程,该过程将在数据库上执行插入语句。 最后,只需打印ID并使用PHP(如果PHP是您的主要脚本)发件人返回生成的行。
示例:
DROP PROCEDURE IF EXISTS insert_row;
DELIMITER $$
CREATE PROCEDURE insert_row(IN _row_id VARCHAR(255), IN _description VARCHAR(255))
BEGIN
SET @last_inserted_id = _row_id;
SET @sql = CONCAT("INSERT INTO test VALUES ('", _row_id, "','",_description,"')");
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SELECT @last_inserted_id AS LAST_INSERT_ID;
END;
$$
DELIMITER ;
#
#
#
#------- HOW TO USE IT ? ---------------
CALL insert_row('Test001','the first test line');
答案 6 :(得分:0)
我发现最简单的方法是设置一个变量。
与使用仅返回的 LAST_INSERT_ID 和 INT 这种方式不同,您可以使用其他唯一标识符。
SET @id = UUID();
INSERT INTO users (
id
)
VALUES (
@id
);
SELECT * FROM users WHERE id = @id;
答案 7 :(得分:-1)
这在XAMPP中对我有用
$qry = $con->query("INSERT INTO test_table(tbl_id, txt) VALUES(last_insert_id('15'), 'test value')");
print_r($con->insert_id);