我有一张偶尔更新的表。ID 列是“auto_increment”。对于每个请求,我想知道最高 ID 号是多少。
保存最新 ID 的最佳方法是什么?是否可以定义一个全局变量来坚持所有脚本运行?
SELECT max(id) FROM `table` WHERE 1
您需要确保向该值添加一个,因为这将代表最新添加的行。
回答新编辑的问题:
保存最新 ID 的最佳方法是什么都不做。不要将 id 字段作为插入的一部分包含在内,mysql 会正确处理它。它将创建该行并为其提供下一个自动递增的 int。如果您想知道刚刚输入的内容,可以运行mysqli_insert_id以获取最近插入数据库的 id。(假设mysqli驱动程序带有php,你没有提到一种语言,所以我只是猜测,其他语言/驱动程序支持类似的功能)。这是否回答你的问题?
如果您想将数据存储在内存中以实现高效访问,您可以将 memcached 与 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 连接,因此要么使用某种单例模式,要么更优选使用依赖注入。
SHOW TABLE STATUS LIKE 'table'
如果您在插入之前阅读,则阅读 Auto_increment 列
或者mysqli_insert_id
如果在插入后阅读