Получить текущее значение auto INCREMENT для любой таблицы

Как получить текущее значение AUTO_INCREMENT для таблицы в MySQL?

6 ответов


Вы можете получить все данные таблицы с помощью запроса:

SHOW TABLE STATUS FROM `DatabaseName` WHERE `name` LIKE 'TableName' ;

вы можете получить именно эту информацию, используя этот запрос:

SELECT `AUTO_INCREMENT`
FROM  INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND   TABLE_NAME   = 'TableName';

Я считаю, что вы ищете MySQL LAST_INSERT_ID ()


Если вы просто хотите узнать номер, а не получить его в запросе, вы можете использовать:

SHOW CREATE TABLE tablename;

вы должны увидеть auto_increment внизу


несмотря на methaiправильный ответ если вы вручную запустите запрос, проблема возникает, когда 2 параллельные транзакции/соединения фактически выполняют этот запрос во время выполнения в производстве (например).

просто попробовал вручную в MySQL workbench с 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 () сразу после вставки! И мы можем повторно использовать этот id для вставки другие таблицы, где ожидается внешний ключ!

кроме того, мы не можем выполнить 2 запроса следующим образом:

insert into translation (id) values ((SELECT AUTO_INCREMENT FROM
    information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()
    AND TABLE_NAME='translation'));

потому что нам действительно интересно захватить / повторно использовать этот идентификатор в другой таблице или вернуть!


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;
    ?>  

если столбец autoincremented в sql server, чтобы увидеть текущее значение autoincremented, и если вы хотите изменить это значение для этого столбца, используйте следующий запрос.

-- to get current value
select ident_current('Table_Name')

-- to update current value
dbcc checkident ('[Table_Name]',reseed,"Your Value")