获取任何表的当前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")