Obtenir la valeur D'incrément automatique actuelle pour n'importe quelle table
Comment puis-je obtenir la valeur AUTO_INCREMENT actuelle pour une table dans MySQL?
6 réponses
Vous pouvez obtenir toutes les données de la table en utilisant cette requête:
SHOW TABLE STATUS FROM `DatabaseName` WHERE `name` LIKE 'TableName' ;
Vous pouvez obtenir exactement cette information en utilisant cette requête:
SELECT `AUTO_INCREMENT`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND TABLE_NAME = 'TableName';
Je crois que vous recherchez la fonction Last_insert_id() de MySQL. Si dans la ligne de commande, exécutez simplement ce qui suit:
LAST_INSERT_ID();
Vous pouvez également obtenir cette valeur via une requête SELECT:
SELECT LAST_INSERT_ID();
Si vous voulez simplement savoir le nombre, plutôt que de le faire dans une requête, vous pouvez utiliser:
SHOW CREATE TABLE tablename;
Vous devriez voir l'auto_increment en bas
Malgré la réponse de methai est correcte Si vous exécutez manuellement la requête, le problème se produit lorsque 2 transactions/connexions simultanées exécutent réellement cette requête au moment de l'exécution en production (par exemple).
Juste essayé manuellement dans MySQL workbench avec 2 connexions ouvertes simultanément:
CREATE TABLE translation (
id BIGINT PRIMARY KEY AUTO_INCREMENT
);
# Suppose we have already 20 entries, we execute 2 new inserts:
Transaction 1:
21 = SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';
insert into translation (id) values (21);
Transaction 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'insertion de la transaction 1 est ok: Insertion de la transaction 2 va en erreur: Code D'erreur: 1062. Dupliquer l'entrée " 21 "pour la clé "primaire".
Une bonne solution serait la réponse de jvdub car par transaction / connexion les 2 insertions seront:
Transaction 1:
insert into translation (id) values (null);
21 = SELECT LAST_INSERT_ID();
Transaction 2:
insert into translation (id) values (null);
22 = SELECT LAST_INSERT_ID();
# commit transaction 1;
# commit transaction 2;
, Mais nous avons à exécuter le last_insert_id(), juste après l'insertion! Et nous pouvons réutiliser id pour être inséré dans d'autres tables où une clé étrangère est prévu!
Aussi, nous ne pouvons pas exécuter les 2 requêtes suivant:
insert into translation (id) values ((SELECT AUTO_INCREMENT FROM
information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()
AND TABLE_NAME='translation'));
Parce que nous sommes réellement intéressés à saisir / réutiliser cet ID dans une autre table ou à retourner!
Exemple de code exécutable 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;
?>
Si la colonne est auto-incrémentée dans sql server, alors pour voir la valeur auto-incrémentée actuelle, et si vous voulez modifier cette valeur pour cette colonne, utilisez la requête suivante.
-- to get current value
select ident_current('Table_Name')
-- to update current value
dbcc checkident ('[Table_Name]',reseed,"Your Value")