获取任何表的当前AUTO_INCREMENT值

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

你可以使用这个查询来获取所有的表格数据:

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()函数。 如果在命令行中,只需运行以下命令:

 LAST_INSERT_ID(); 

你也可以通过SELECT查询来获得这个值:

 SELECT LAST_INSERT_ID(); 

如果你只是想知道这个号码,而不是在查询中得到它,那么你可以使用:

 SHOW CREATE TABLE tablename; 

你应该在底部看到auto_increment

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

尽pipe如果手动运行查询, methai的答案是正确的,但是当两个并发事务/连接在生产(例如)运行时实际执行此查询时,会发生问题。

只需在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.重复键入'PRIMARY'的条目'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或返回!

如果列在sql server中自动增量,那么查看当前的自动增量值,如果要编辑该列的值,请使用以下查询。

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