IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

Organiser les index pour quelle soit 1, 2, 3..


Sujet :

SQLite

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Points : 45
    Points
    45
    Par défaut Organiser les index pour quelle soit 1, 2, 3..
    Salut,

    comme tout le monde je fais mes enregistrements grace à ça: id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT et c'est bien important pour moi cette autoincrement, sauf que quand je supprime une ligne sa devient n'import quoi exemple:

    quand je fais l'enregistrement dans un table vide ça commence comme ça:
    ligne 1: id:1, user: david
    ligne 2: id:2, user: clement
    ligne 3: id:3, user: cyprien
    ligne 4: id 4, user: michel
    ...

    maintenant si je decide de supprime la ligne 3 ça devient comme ça:
    ligne 1: id:1, user: david
    ligne 2: id:2, user: clement
    ligne 4: id 4, user: michel
    ...

    ce qui est pas propre les numéro ne sont pas dans l'ordre

    est ce qu'il y'a un moyen d'organiser les numeros ?

    merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Bonjour,

    Par définition un champ auto-incrément est géré par le moteur de base de données, et il ne doit jamais être généré de valeur qui ne soit pas supérieure à la dernière valeur en base. Ta demande est de l'ordre de la cosmétique et ne gêne en rien la gestion de la base de données ni normalement ton, modèle conceptuel.

    Si tu veux jouer avec, tu peux regarder dans la discussion suivante http://www.developpez.net/forums/d13...autoincrement/.

    Notes également que SQLITE ne t'empêcheras pas d'insérer une ligne avec le champ auto incrément que tu désire à la seule condition que celui ci soit unique (sinon
    UNIQUE constraint failed:
    )

    Cordialement

  3. #3
    Expert confirmé Avatar de ed73170
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2009
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2009
    Messages : 765
    Points : 5 522
    Points
    5 522
    Par défaut
    L’intérêt d'une clé primaire en auto incrément c'est justement de t'assurer que ton index sera unique et aussi que les tables qui possèdent cette clé primaire comme clé étrangère soient toujours liées de manière correcte. Un autre avantage est que le dernier enregistrement créé aura toujours la valeur la plus élevée, ce qui peut éventuellement servir.

    Si vraiment ce fonctionnement ne te convient pas, tu peux toujours gérer ça toi même et récupérer les trous, mais fais bien attention aux autres tables. A mon avis c'est une source de risque de corruption des données.

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Points : 45
    Points
    45
    Par défaut
    Merci pour vous reponses, la clé primaire m'interesse beaucoup et c'est essentiel car mes enregistrements sont dynamique je ne peux pas savoir le nombre exacte.
    en tous cas j'ai cherché partout sur sqlite_sequence sur c# les plus par utilise ça:
    delete from table_name;
    delete from sqlite_sequence where name='table_name';

    mais c'est bizare, si j'execute la requete delete from table_name; la table sera entieerement supprimer alors que je veux juste organiser les numéros ID

    j'ai essayé ça:
    sql = "DELETE FROM SQLITE_SEQUENCE";
    cmd= new SQLiteCommand(sql, db);
    cmd.ExecuteNonQuery();

    et ça ne marche pas aussi :/
    que dois je faire SVP
    Nom : Sans titre-1.jpg
Affichages : 246
Taille : 27,0 Ko

  5. #5
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Bonjour,

    Que cherches tu à faire exactement?
    Une clé auto incrément est géré par le logiciel et ne doit pas être manipulée. Elle peut être utilisée en référence d'une clé étrangère et c'est pour cela qu'elle ne doit JAMAIS être modifiée. Les trous n'ont pas d'importance.

    Si tu cherches à numéroter tes lignes (pour quel but?) tu vas devoir le gérer toi même. Un SGBD n'a pas de notion d'ordre et donc ne te restitue les lignes que selon l'ordre que tu lui demande.

    NB. Tu peux supprimer la table SQLITE_SEQUENCE cela ne changera pas la gestion des auto incrément et si tu supprimes ta table, il te faut bien un moyen de la recréer...

    cordialement

  6. #6
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Points : 45
    Points
    45
    Par défaut
    Re-bonjour;
    Ce que je veux est simple, regarde la photo ci dessous j'ai 5 personne enregistré dans ma base de données les 3 premiers personnes sont toujours actives et donc ils ont l'ID 1, 2, 3 mais les autres ont été supprimé vu les jours d'inactives, les nouveau utilisateurs arrive, lors de l'enregistrement ils ont été enregistré comme si c'était les memebres numéro 19 et 20 alors qu'ils sont les 4, et 5.
    ma question c'est: est ce qu'il existe un moyen pour dire à mon ID qui est à la base: id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT de mettre les numéro propre à chaque fois que quelqu'un va etre supprimer ?
    1,2,3,4,5...
    et non pas
    1,2,3,19,20

    Nom : Sans titre-1.jpg
Affichages : 245
Taille : 40,6 Ko

  7. #7
    Expert confirmé Avatar de ed73170
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2009
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2009
    Messages : 765
    Points : 5 522
    Points
    5 522
    Par défaut
    Non, il n'y pas de moyen de faire ce que tu veux si ta clé primaire est en auto incrément, et c'est pareil avec tous les SGBD.

    La vraie question est de savoir pourquoi tu veux faire ça.

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Points : 45
    Points
    45
    Par défaut
    c'est juste pour faire jolie à mon rpogramme j'aime pas voir de decalage des nombres :/
    sinon comment les autres logiciels ont des num propres Oo
    sinon la base de données de developpez.net sera n'importe quoi si un compte est supprimé :/ comment ils font eux ???

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    S'il s'agit uniquement de faire joli, il suffit de rajouter un compteur de ligne dans la requête qui affiche la liste.
    Dans la majorité des bases de données, un identifiant est unique et attribué une seule fois.
    Comment s'y retrouver dans un fichier Fournisseur où le numéro du Fournisseur peut changer d'un jour à l'autre parce qu'un Fournisseur plus ancien a cessé d'être référencé ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

Discussions similaires

  1. Les index pour FOREIGN KEY ?
    Par vocal94130 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 03/06/2010, 18h41
  2. [HTML 4.0] regrouper des image pour quelle soit une seule
    Par nostalamigo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 05/04/2009, 15h47
  3. Réponses: 1
    Dernier message: 29/06/2007, 09h19
  4. petit conseil pour les index
    Par fpouget dans le forum Langage SQL
    Réponses: 11
    Dernier message: 10/12/2005, 04h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo