Mysql 选择最后一个id,不插入

Mysql 选择最后一个id,不插入,mysql,lastinsertid,Mysql,Lastinsertid,我正在尝试检索一个表A的id以插入到另一个表B中。我无法使用last_insert_id(),因为我没有在A中插入任何内容。有什么好的方法吗 $n=mysql\u查询(“从tablename中选择max(id))似乎不起作用,也不起作用 $n = mysql_query("SELECT max(id) FROM tablename GROUP BY id"); 在MySQL中,这会从id列返回最高值: SELECT MAX(id) FROM tablename; 但是,这不会将该id放入$n

我正在尝试检索一个表A的id以插入到另一个表B中。我无法使用last_insert_id(),因为我没有在A中插入任何内容。有什么好的方法吗

$n=mysql\u查询(“从tablename中选择max(id))似乎不起作用,也不起作用

$n = mysql_query("SELECT max(id) FROM tablename GROUP BY id");

在MySQL中,这会从
id
列返回最高值:

SELECT MAX(id) FROM tablename;
但是,这不会将该id放入
$n

$n = mysql_query("SELECT max(id) FROM tablename");
要获取值,您需要执行以下操作:

$result = mysql_query("SELECT max(id) FROM tablename");

if (!$result) {
    die('Could not query:' . mysql_error());
}

$id = mysql_result($result, 0, 'id');
如果要从A获取最后一个插入ID并将其插入B,可以使用一个命令:

INSERT INTO B (col) SELECT MAX(id) FROM A;

我想给每一条记录加上时间戳,得到最新的。在这种情况下,您可以获得任何ID、打包行和其他操作。

您可以:

InnoDB使用以下算法 初始化自动递增计数器 对于包含 名为ai_col的自动增量列: 服务器启动后,第一次 插入到表t中,InnoDB执行 这一说法的等价物是:

SELECT MAX(ai_col) FROM t FOR UPDATE;
InnoDB将值增加1 由语句检索并赋值 将其添加到列和 表的自动递增计数器。 如果表为空,InnoDB将使用 值1


您还可以使用及其“自动增量”值。

您可以按id对选项卡进行向下排序,并将结果数限制为一个:

SELECT id FROM tablename ORDER BY id DESC LIMIT 1

但是:
重新排列此请求的整个表。因此,如果您有大量数据,并且需要多次重复此操作,我不推荐此解决方案。

我有不同的解决方案:

SELECT AUTO_INCREMENT - 1 as CurrentId FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME = 'tablename'

什么发动机?mysql,mssql?访问权限?你所说的“似乎不起作用”是什么意思?定义“似乎不起作用”。什么不起作用?它的回报是什么?应该是什么?id是否正确设置为主键?请使用以下输出更新您的问题:
DESC TABLE_A
,将“TABLE_A”替换为您希望从中获取最新id值的表的名称。“for update”表示在选择结束之前,表被锁定以进行写入。当然,最好选择最大值并在锁定这两个表的一个事务中插入。如果删除了一些记录,这将是一个完美的解决方案。如果我手动从表中删除了行,此方法仍然有效吗?