我试图检索一个表A的ID插入到另一个表B.我不能使用last_insert_id(),因为我没有插入任何东西到A.任何想法如何做到这一点好听?SELECT last id,without INSERT
$n = mysql_query("SELECT max(id) FROM tablename");
似乎 没有工作,也没有
$n = mysql_query("SELECT max(id) FROM tablename GROUP BY id");
我试图检索一个表A的ID插入到另一个表B.我不能使用last_insert_id(),因为我没有插入任何东西到A.任何想法如何做到这一点好听?SELECT last id,without INSERT
$n = mysql_query("SELECT max(id) FROM tablename");
似乎 没有工作,也没有
$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,包装行和其他操作。
您可以get maximum column value and increment it:
InnoDB使用下列算法来 初始化自动增长计数器 为包含 AUTO_INCREMENT名为ai_col列一个表t: 服务器启动后,第 插入到表t,InnoDB的执行 这一说法相当于:
SELECT MAX(ai_col) FROM t FOR UPDATE;
InnoDB将由语句检索到的值 递增1,并将 分配给列的自动递增计数器并将其分配给表中的 。 如果表是空的,InnoDB使用的 值1
您也可以使用SHOW TABLE STATUS和它的“AUTO_INCREMENT”值。
线程如何安全? – 2010-06-28 15:36:33
“for update”表示表被锁定,直到选择结束才写入。当然,选择最大值并插入锁定这两个表的一个事务中会更好。 – silent 2010-06-28 15:39:25
锁定写入?哎哟。 – 2010-06-28 16:10:23
你可以递减顺序按id的tabele和限制的结果数量一:
SELECT id FROM tablename ORDER BY id DESC LIMIT 1
但是:ORDER BY
重新排列整个表这一请求。所以如果你有很多的数据,你需要重复这个操作几次,我不会推荐这个解决方案。
什么引擎? mysql,mssql?访问? – masfenix 2010-06-28 15:26:10
你的意思是“似乎不起作用”? – 2010-06-28 15:27:02
定义“似乎不起作用”。什么不行?它返回什么?它应该是什么? – CaffGeek 2010-06-28 15:27:02