Comment obtenir le prochain identifiant d’incrémentation automatique dans mysql

Comment obtenir l’id suivant dans mysql pour l’insérer dans la table

INSERT INTO payments (date, item, method, payment_code) VALUES (NOW(), '1 Month', 'paypal', CONCAT("sahf4d2fdd45", id)) 

Utilisez LAST_INSERT_ID() partir de votre requête SQL.

Ou

Vous pouvez également utiliser mysql_insert_id() pour l’obtenir en utilisant PHP.

Vous pouvez utiliser

 SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'table_name' AND table_schema = DATABASE( ) ; 

ou si vous ne souhaitez pas utiliser information_schema, vous pouvez l’utiliser

 SHOW TABLE STATUS LIKE 'table_name' 

Vous pouvez obtenir la valeur d’incrémentation automatique suivante en procédant comme suit:

 SHOW TABLE STATUS FROM tablename LIKE Auto_increment /*or*/ SELECT `auto_increment` FROM INFORMATION_SCHEMA.TABLES WHERE table_name = 'tablename' 

Notez que vous ne devez pas utiliser ceci pour modifier la table, utilisez plutôt une colonne auto_increment pour le faire automatiquement à la place.
Le problème est que last_insert_id() est rétrospectif et peut donc être garanti dans la connexion actuelle.
Ce bébé est prospectif et n’est donc pas unique par connexion et ne peut être invoqué.
Cela ne fonctionnerait que dans une seule firebase database de connexion, mais les bases de données à connexion unique ont aujourd’hui l’habitude de devenir de multiples bases de données de connexion demain.

En PHP, vous pouvez essayer ceci:

 $query = mysql_query("SELECT MAX(id) FROM `your_table_name`"); $results = mysql_fetch_array($query); $cur_auto_id = $results['MAX(id)'] + 1; 

OU

 $result = mysql_query("SHOW TABLE STATUS WHERE `Name` = 'your_table_name'"); $data = mysql_fetch_assoc($result); $next_increment = $data['Auto_increment']; 

La réponse supérieure utilise PHP MySQL_ pour une solution, pensant que je partagerais une solution PHP MySQLi_ mise à jour pour y parvenir. Il n’y a pas d’erreur de sortie dans cet exemple!

 $db = new mysqli('localhost', 'user', 'pass', 'database'); $sql = "SHOW TABLE STATUS LIKE 'table'"; $result=$db->query($sql); $row = $result->fetch_assoc(); echo $row['Auto_increment']; 

Lance le prochain incrément automatique dans une table.

Cela retournera la valeur d’incrémentation automatique pour la firebase database MySQL et je n’ai pas vérifié avec d’autres bases de données. Veuillez noter que si vous utilisez une autre firebase database, la syntaxe de la requête peut varier.

 SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'your_table_name' and table_schema = database(); 

Solution:

 CREATE TRIGGER `IdTrigger` BEFORE INSERT ON `payments` FOR EACH ROW BEGIN SELECT AUTO_INCREMENT Into @xId FROM information_schema.tables WHERE Table_SCHEMA ="DataBaseName" AND table_name = "payments"; SET NEW.`payment_code` = CONCAT("sahf4d2fdd45",@xId); END; 

“DataBaseName” est le nom de notre firebase database

Vous pouvez utiliser mysql sortinggger

Vous ne pouvez pas utiliser l’identifiant lors de l’insertion, vous n’en avez pas non plus besoin. MySQL ne connaît même pas l’ID lorsque vous insérez cet enregistrement. Vous pouvez simplement sauvegarder "sahf4d2fdd45" dans la table payment_code et utiliser ultérieurement id et payment_code .

Si vous avez vraiment besoin de votre code payment_code pour avoir l’ID, mettez à jour la ligne après l’insertion pour append l’ID.

De quoi avez-vous besoin pour le prochain identifiant incrémentiel?

MySQL n’autorise qu’un seul champ auto-incrémenté par table et doit également être la clé primaire pour garantir l’unicité.

Notez que lorsque vous obtenez l’ID d’insertion suivant, il se peut qu’il ne soit pas disponible lorsque vous l’utilisez car la valeur que vous avez est uniquement dans la scope de cette transaction. Par conséquent, en fonction de la charge de votre firebase database, cette valeur peut déjà être utilisée au moment où la demande suivante est reçue.

Je vous suggère de revoir votre conception pour vous assurer que vous n’avez pas besoin de savoir quelle valeur d’incrémentation automatique atsortingbuer ensuite

Une requête simple ferait SHOW TABLE STATUS LIKE 'table_name'

Vous devez vous connecter à MySQL et sélectionner une firebase database avant de pouvoir le faire

 $table_name = "myTable"; $query = mysql_query("SHOW TABLE STATUS WHERE name='$table_name'"); $row = mysql_fetch_array($query); $next_inc_value = $row["AUTO_INCREMENT"]; 

Je suggère de repenser ce que vous faites. Je n’ai jamais connu un seul cas d’utilisation nécessitant des connaissances particulières. Le prochain identifiant est un détail d’implémentation très spécial et je ne compte pas le récupérer en toute sécurité.

Faites une transaction simple qui met à jour votre ligne insérée avec le dernier identifiant:

 BEGIN; INSERT INTO payments (date, item, method) VALUES (NOW(), '1 Month', 'paypal'); UPDATE payments SET payment_code = CONCAT("sahf4d2fdd45", LAST_INSERT_ID()) WHERE id = LAST_INSERT_ID(); COMMIT; 

utilisez “mysql_insert_id ()”. mysql_insert_id () agit sur la dernière requête effectuée, assurez-vous d’appeler mysql_insert_id () immédiatement après la requête qui génère la valeur.

Voici l’exemple d’utilisation:

 < ?php $link = mysql_connect('localhost', 'username', 'password'); if (!$link) { die('Could not connect: ' . mysql_error()); } mysql_select_db('mydb'); mysql_query("INSERT INTO mytable VALUES('','value')"); printf("Last inserted record has id %d\n", mysql_insert_id()); ?> 

J’espère que l’exemple ci-dessus est utile.

 mysql_insert_id(); 

C’est tout 🙂

 SELECT id FROM `table` ORDER BY id DESC LIMIT 1 

Bien que je doute de sa productivité mais de sa fiabilité à 100%

en utilisant la réponse de ravi404:

 CREATE FUNCTION `getAutoincrementalNextVal`(`TableName` VARCHAR(50)) RETURNS BIGINT LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN DECLARE Value BIGINT; SELECT AUTO_INCREMENT INTO Value FROM information_schema.tables WHERE table_name = TableName AND table_schema = DATABASE(); RETURN Value; END 

en utilisant dans votre requête d’insertion, pour créer un hachage SHA1. ex.:

 INSERT INTO document (Code, Title, Body) VALUES ( sha1( getAutoincrementalNextval ('document') ), 'Title', 'Body' ); 

Amélioration de @ ravi404, au cas où votre décalage automatique serait NOT 1:

 SELECT (`auto_increment`-1) + IFNULL(@@auto_increment_offset,1) FROM INFORMATION_SCHEMA.TABLES WHERE table_name = your_table_name AND table_schema = DATABASE( ); 

( auto_increment -1): le moteur de firebase database semble toujours considérer un décalage de 1. Vous devez donc abandonner cette hypothèse, puis append la valeur facultative de @@ auto_increment_offset, ou la valeur par défaut à 1: IFNULL (@@ auto_increment_offset, 1)