Как получить текущее значение AUTO_INCREMENT для таблицы в MySQL?
Получить текущее значение AUTO_INCREMENT для любой таблицы
Ответ 1
Вы можете получить все данные таблицы, используя этот запрос:
SHOW TABLE STATUS FROM `DatabaseName` WHERE `name` LIKE 'TableName' ;
Вы можете получить именно эту информацию, используя этот запрос:
SELECT `AUTO_INCREMENT`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND TABLE_NAME = 'TableName';
Ответ 2
Я считаю, что вы ищете функцию MySQL LAST_INSERT_ID(). Если в командной строке просто запустите следующее:
LAST_INSERT_ID();
Вы также можете получить это значение с помощью запроса SELECT:
SELECT LAST_INSERT_ID();
Ответ 3
Если вы просто хотите узнать номер, а не получить его в запросе, вы можете использовать:
SHOW CREATE TABLE tablename;
Вы должны увидеть auto_increment внизу
Ответ 4
Несмотря на то, что ответ methai является правильным, если вы выполняете запрос вручную, возникает проблема, когда 2 одновременных транзакции/соединения фактически выполняют этот запрос во время выполнения в производстве (например).
Только что попробовал вручную в MySQL верстак с 2 открытыми одновременно соединениями:
CREATE TABLE translation (
id BIGINT PRIMARY KEY AUTO_INCREMENT
);
# Suppose we have already 20 entries, we execute 2 new inserts:
Транзакция 1:
21 = SELECT 'AUTO_INCREMENT' FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';
insert into translation (id) values (21);
Транзакция 2:
21 = SELECT 'AUTO_INCREMENT' FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';
insert into translation (id) values (21);
# commit transaction 1;
# commit transaction 2;
Вставка транзакции 1 в порядке: вставка транзакции 2 происходит с ошибкой: Код ошибки: 1062. Дублирующая запись '21' для ключа 'PRIMARY'.
Хорошим решением будет ответ jvdub, потому что на одну транзакцию/соединение будет 2 вставки:
Транзакция 1:
insert into translation (id) values (null);
21 = SELECT LAST_INSERT_ID();
Транзакция 2:
insert into translation (id) values (null);
22 = SELECT LAST_INSERT_ID();
# commit transaction 1;
# commit transaction 2;
Но мы должны выполнить last_insert_id() сразу после вставки! И мы можем повторно использовать этот идентификатор для вставки в другие таблицы, где ожидается внешний ключ!
Также мы не можем выполнить 2 запроса следующим образом:
insert into translation (id) values ((SELECT AUTO_INCREMENT FROM
information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()
AND TABLE_NAME='translation'));
потому что мы на самом деле заинтересованы, чтобы захватить/повторно использовать этот идентификатор в другой таблице или вернуть!
Ответ 5
Пример исполняемого кода mysqli:
<?php
$db = new mysqli("localhost", "user", "password", "YourDatabaseName");
if ($db->connect_errno) die ($db->connect_error);
$table=$db->prepare("SHOW TABLE STATUS FROM YourDatabaseName");
$table->execute();
$sonuc = $table->get_result();
while ($satir=$sonuc->fetch_assoc()){
if ($satir["Name"]== "YourTableName"){
$ai[$satir["Name"]]=$satir["Auto_increment"];
}
}
$LastAutoIncrement=$ai["YourTableName"];
echo $LastAutoIncrement;
?>
Ответ 6
Если столбец автоинкрементирован на сервере sql, то для просмотра текущего автоинкрементного значения, и если вы хотите отредактировать это значение для этого столбца, используйте следующий запрос.
-- to get current value
select ident_current('Table_Name')
-- to update current value
dbcc checkident ('[Table_Name]',reseed,"Your Value")