J'ai créé une table utilisateurs avec un ID de ligne et avec incrémentation automatique, mais lorsque j'ai supprimé un utilisateur SQL n'organise pas l'ID des utilisateurs, il reste tel quel comme:
Mona 1 Ahmed 15 john 17
Je veux les organiser automatiquement sans correction manuelle
4 Réponses :
Utilisation de l'instruction ALTER TABLE
Disons que vous avez supprimé une ligne dans une table
DROP TABLE table_name; CREATE TABLE table_name(...);
Si vous insérez une nouvelle ligne, MySQL attribuera 4 à la colonne id de la nouvelle ligne. Cependant, vous pouvez réinitialiser le nombre généré par MySQL à 3 en utilisant l'instruction ALTER TABLE comme suit:
TRUNCATE TABLE table_name;
Utilisation de l'instruction TRUNCATE TABLE p>
L'instruction TRUNCATE TABLE supprime toutes les données d'une table et réinitialise la valeur d'incrémentation automatique à zéro.
ALTER TABLE tmp AUTO_INCREMENT = 3;
Utilisation de DROP TABLE et CREATE TABLE instructions
Comme l'instruction TRUNCATE TABLE, ces instructions suppriment la table et la recréent, par conséquent, la valeur de l'incrémentation automatique est remise à zéro.
DELETE FROM tmp WHERE ID = 3;
La suppression d'une entrée d'une table n'affecterait pas le champ AUTO_INCREMENT .
Vous devrez tronquer votre table pour réinitialiser le champ AUTO_INCREMENT , mais cette opération supprimerait toutes les données de votre table actuelle.
OU
Définissez le champ AUTO_INCREMENT sur l'ID de la dernière ligne supprimée, comme suggéré dans d'autres commentaires. Mais cela pourrait briser la cohérence des enregistrements existants si une ligne intermédiaire est supprimée.
auto_increment ne réutilise PAS les nombres. Si vous mettez à jour manuellement auto_increment, MySQL commencera à réorganiser les enregistrements sur le disque. Cela rendra votre base de données lente, très, très lente.
Solution: n'utilisez pas auto_increment pour l'étiquetage séquentiel des nombres.
auto_increment ne fournit pas de nombres séquentiels , il fournit des nombres uniques et utilise un algorithme séquentiel pour ce faire. Avoir des lacunes est normal, essayer de les corriger ruine les performances de votre base de données.
TL; DR:
auto_increment entraîne une énorme pénalité, vous ralentirez votre base de données et vous ruinerez probablement l'intégrité Ne la touchez pas.
J'ai une solution qui fonctionne pour moi
Script PHP simple pour réorganiser la ligne de base de données (nombre)
$servername = "$sname";
$username = "$uname";
$password = "$pass";
$dbname = "$dname";
// Create connection
$con = new mysqli($servername, $username, $password, $dbname);
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
exit;
}
$conn = $con;
$sql = "SELECT * FROM `$tname` ORDER BY `$column_name` ASC LIMIT $r_limit";
$result=mysqli_query($conn, $sql);
$counter='';
if ($result->num_rows > 0) {
while($row = mysqli_fetch_array($result))
{
$counter++;
$id=$row["id"];
$update_sql="UPDATE `$tname` SET `$column_name`='$counter' WHERE `id`='$id'";
if ($conn->query($update_sql) === TRUE) {
$Status="updated successfully";
}else {
$Status="Error: " . $conn->error;
}
}
}
Cliquez ici pour le script complet https://github.com/tushargabhane3?tab=projects
Ce script organisera la colonne id dans une séquence, commencez à partir de 1
Nous n'entrons que quelques paramètres dans la zone de texte comme le nom du serveur, le nom de la base de données, la table, etc.
Après cela, ce script réorganise la colonne et affiche tout sortie dans un format de tableau.
L'ID d'incrémentation automatique ne sera pas réinitialisé à la séquence suivante. Vous devez écrire ce code vous-même. D'autre part, l'incrémentation automatique peut être réinitialisée en effectuant une requête
ALTER TABLE table_name AUTO_INCREMENT = 1;Quoi que vous décidiez de faire, vous devrez toujours utiliser une clause order by pour 'organiser' les données sur une sélection - donc je ne vois pas l'intérêt d'aller à la peine de reconstruire une colonne auto_increment.
Si ce champ est votre clé primaire, vous ne devriez jamais essayer de modifier la valeur qu'il contient. La valeur doit vous fournir une référence unique et immuable à cet élément de données, qui peut être invoquée par d'autres. Vous ne devez pas lui attribuer une autre signification. Sinon, ailleurs, si vous avez une référence à l'enregistrement 17, puis changez l'ID de 17 en 10, cela rend la référence à 17 inutile et l'intégrité de vos données est détruite ... vous commencerez à renvoyer des données incorrectes de votre requêtes.
Si vous souhaitez créer une séquence soignée de nombres consécutifs à afficher dans une liste de vos lignes, utilisez un champ séparé pour cela et mettez-le à jour séparément chaque fois que vous ajoutez ou supprimez une ligne - un déclencheur serait peut-être un bon moyen d'atteindre cette