2013-06-24 12 views
1

我有一个偶尔更新的表。 ID列是'auto_increment'。 对于每一个请求,我想知道什么是最高的ID号码。需要存储我的数据库的最新ID

保存最新ID的最佳方法是什么? 是否可以定义一个全局变量来坚持所有的脚本运行?

+0

新行插入的频率如何?如果几乎所有请求都没有意义,但如果不是经常这样,那么这将是使用Memcached的好地方。 – Paulpro

+0

我只是好奇你为什么需要这个。如果您需要获取插入行的ID,在插入行后,您可以调用[mysqli_insert_id](http://www.php.net/mysqli_insert_id)来获取ID。请不要试图自己找到id,因为当两行快速插入同一张表时,可能会得到错误的id。 –

+0

@Kuhn,不会从其他脚本插入id。我只需要阅读该脚本 – Ted

回答

2
SELECT max(id) FROM `table` WHERE 1 

您需要确保为此值添加一个,因为这将代表最新添加的行。

答案,新编辑的问题:

的最佳方式保存最新的ID是干脆什么也不做。不要将id字段作为插入的一部分,mysql会正确处理它。它将创建该行并为其提供下一个自动递增的int。如果您想知道刚刚输入的内容,可以运行mysqli_insert_id以获取最新插入的标识到数据库中。 (这假设mysqli驱动程序与PHP,你没有提到一种语言,所以我只是猜测,其他语言/驱动程序支持类似的功能)。这是否回答你的问题?

+0

编辑我的问题 – Ted

+0

@Landon为什么加1(假设你打算在插入前做这个)?存在这样的风险,即这会不准确,返回一个不存在的值。插入后使用'mysqli_insert_id'会更好,并且是为此目的而设计的。 –

+0

这个问题被编辑,原来的问题问什么是*将要插入的下一个id – Landon

0
SHOW TABLE STATUS LIKE 'table' 

然后读取AUTO_INCREMENT列,如果你在插入之前如果插入

1

阅读后如果你想将数据存储在内存中高效的访问,你可以使用memcached的阅读

mysqli_insert_id与MemCache或MemCached PHP扩展:

$memcache = new Memcache; 
$memcache->connect('localhost', 11211); 

$memcache->set('last_id', $last_id); // Store the id in memory with no expiration 

每当最后一个id更改只是再次设置它。为了从内存中的ID,你可以这样做:

$memcache->get('last_id'); 

如果$ memcache-> GET返回false,那么你的缓存得到了莫名其妙丢了,所以你需要再次获取last_id你的数据库进行设置。

请注意(出于效率的原因),您不希望在每次使用Memcache时实例化新的Memcache连接,因此要么使用某种Singleton模式,要么使用依赖注入。

+0

你是什么意思的'depepndency注入'? – Ted

相关问题