获取当前的AUTO_INCREMENT值的任何表获取当前的AUTO_INCREMENT值的任何表(G

2019-05-06 15:26发布

我如何获得MySQL中的表当前的AUTO_INCREMENT值?

Answer 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';


Answer 2:

我相信你正在寻找MySQL的LAST_INSERT_ID()函数。 如果在命令行中,只需运行以下命令:

LAST_INSERT_ID();

您还可以通过获得一个SELECT查询该值:

SELECT LAST_INSERT_ID();


Answer 3:

如果你只是想知道的数量,而不是在一个查询得到它,那么你可以使用:

SHOW CREATE TABLE tablename;

您应该看到AUTO_INCREMENT底部



Answer 4:

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


Answer 5:

尽管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”重点“主要”。

一个好的解决办法是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'));

因为我们确实有兴趣抢到/重复使用ID在其他表或来回报您!



Answer 6:

如果列在SQL Server自动递增即可看到当前自动增量值,如果你想要编辑值,该列使用下面的查询。

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

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


文章来源: Get current AUTO_INCREMENT value for any table