Ottieni il valore AUTO_INCREMENT corrente per qualsiasi tabella

Come ottengo il valore AUTO_INCREMENT corrente per una tabella in MySQL?

È ansible ottenere tutti i dati della tabella utilizzando questa query:

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

È ansible ottenere esattamente queste informazioni utilizzando questa query:

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

Credo che tu stia cercando la funzione LAST_INSERT_ID () di MySQL. Se nella riga di comando, è sufficiente eseguire quanto segue:

 LAST_INSERT_ID(); 

È inoltre ansible ottenere questo valore tramite una query SELECT:

 SELECT LAST_INSERT_ID(); 

Se vuoi solo conoscere il numero, piuttosto che ottenerlo in una query, puoi utilizzare:

 SHOW CREATE TABLE tablename; 

Dovresti vedere l’auto_increment in fondo

Nonostante la risposta di methai sia corretta se si esegue manualmente la query, il problema si verifica quando 2 transazioni / connessioni simultanee eseguono effettivamente questa query in fase di esecuzione in produzione (ad esempio).

Appena provato manualmente nel workbench MySQL con 2 connessioni aperte contemporaneamente:

 CREATE TABLE translation ( id BIGINT PRIMARY KEY AUTO_INCREMENT ); # Suppose we have already 20 entries, we execute 2 new inserts: 

Transazione 1:

 21 = SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation'; insert into translation (id) values (21); 

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

L’inserimento della transazione 1 è ok: l’inserimento della transazione 2 va in errore: Codice di errore: 1062. Voce duplicata ’21’ per la chiave ‘PRIMARY’.

Una buona soluzione sarebbe la risposta di jvdub perché per transazione / connessione i 2 inserti saranno:

Transazione 1:

 insert into translation (id) values (null); 21 = SELECT LAST_INSERT_ID(); 

Transazione 2:

 insert into translation (id) values (null); 22 = SELECT LAST_INSERT_ID(); # commit transaction 1; # commit transaction 2; 

Ma dobbiamo eseguire l’ ultimo_insert_id () subito dopo l’inserimento! E possiamo riutilizzare quell’id per essere inseriti in altre tabelle dove è prevista una chiave esterna!

Inoltre, non possiamo eseguire le 2 query come segue:

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

perché in realtà siamo interessati ad afferrare / riutilizzare quell’ID in un’altra tabella o a tornare!

codice di esempio eseguibile mysqli:

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

Se la colonna è autoincrementata in SQL Server, per visualizzare il valore corrente autoincrementato corrente e se si desidera modificare quel valore per quella colonna, utilizzare la seguente query.

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