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

Requêtes MySQL Discussion :

Auto-incrément à partir de zéro


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Par défaut Auto-incrément à partir de zéro
    Bonjour a tous,

    j'ai plusieurs tables dans ma base pour gérer les langues (les noms sont également traduit dans toutes les langues).
    c'est pour un site sur le cinema.

    J'ai besoin d'afficher pour: film ou un dvd, etc.. une liste de langues (français, anglais, etc..., ou "aucun")
    Globalement dans le code du site l'id "1" correspond au français donc j'aimerai utiliser cet id = 1 = français dans la base de données aussi.

    "aucun" est considéré comme un language car pour les infos d'un dvd par exemple jeux avoir ces 3 cas de figures

    1: plusieurs langues renseignés
    2: "aucun" (aucun sous titres)
    3: non renseigné

    Donc voilà mon problème, pour diverses raisons j'aimerai que l'id 0 = ".." (qui correspond a "aucun")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    CREATE TABLE IF NOT EXISTS `langues` (
      `id` tinyint(3) UNSIGNED NOT NULL AUTO_INCREMENT,
      `suffixe` char(2) NOT NULL COMMENT 'Suffixe à 2 lettres de la langue selon la norme ISO_639-1',
    PRIMARY KEY (`id`),
    UNIQUE KEY `id` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
     
     
    INSERT INTO `langues` (`id`, `suffixe`) VALUES
    (1, 'fr'),
    (2, 'en'),
    (3, 'es'),
    (4, 'pl'),
    (5, 'de'),
    (6, '..');
    cette table (simplifiée) me permet d'obtenir un id automatiquement pour chaque langue, cet id est utilisé ensuite avec les autres tables.
    actuellement le numéro 6 correspond a ".." et j'aimerai le mettre en numéro 0.

    le problème est simplement là, et si je fais ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    CREATE TABLE IF NOT EXISTS `langues` (
      `id` tinyint(3) UNSIGNED NOT NULL AUTO_INCREMENT,
      `suffixe` char(2) NOT NULL COMMENT 'Suffixe à 2 lettres de la langue selon la norme ISO_639-1',
    PRIMARY KEY (`id`),
    UNIQUE KEY `id` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
     
    INSERT INTO `langues` (`id`, `suffixe`) VALUES
    (0, '..'),
    (1, 'fr'),
    (2, 'en'),
    (3, 'es'),
    (4, 'pl'),
    (5, 'de');
    l'incrementation démarre quand même à 1 ce qui donne:
    (1,'..')
    et j'obtiens une erreur quand il essaie d’insérer:
    (1, 'fr')

    SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicata du champ '1' pour la clef 'PRIMARY'

    J'ai essayé avec AUTO_INCREMENT=-1 mais il n'apprécie pas non plus.

    J'ai vu que tous mes id commence a 1 dans toutes mes tables. Du coup je me demande si je ne devrais pas dans la logique SQL ajouter une colonne 'id_langue' qui elle pourrait commencer a '0'.
    Mais dans ce cas, comment obtenir automatiquement un nouvel 'id_langue' unique lorsque j'ajoute une langue ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 484
    Par défaut
    Bonjour,
    D'après l'aide en ligne de MySQL, ça devrait fonctionner si l'option NO_AUTO_VALUE_ON_ZERO est activée.
    Tu peux regarder de ce côté.

    Tatayo.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Par défaut
    Merci pour l'info,
    par contre si ça touche à la configuration de MySQL, je ne pense pas y avoir accès chez mon hébergeur donc ça va coincer.

    En fait la vrai question c'est:
    Est ce que c'est très mal d'utiliser l'id 0 sur une table ? Et pourquoi?

    Parce que sinon des solutions pour contourner le problème j'en ai vu 1 ou 2 mais j'hésite a les utiliser car si il faut tricher pour y arriver c'est qu'il doit y avoir un problème structurel au départ.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 009
    Billets dans le blog
    6
    Par défaut
    Un ID ne devrait JAMAIS être lié à une valeur particulière (-1, 0 ou 1 par exemple). C'est pour lutter contre les clefs sémantiques que l'on a justement inventé les auto incréments !!!!

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Par défaut
    J'ai eu le temps de faire des recherches et tu confirme ce que d'autres experts se tuent à dire.
    Ce qui est dommage c'est personne n'explique clairement pourquoi il ne faut pas utiliser les id pour autre chose que leur usage théorique.
    Dans quels cas un id peut changer de valeur ?

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 009
    Billets dans le blog
    6
    Par défaut
    Les ID sont distribués au hasard, même s'il sont croissant tu n'as jamais aucune certitude d'avoir tel ou tel n°, du fait des accès concurrentiels.

    Un simple exemple….
    La valeur actuel du dernier auto incrément est de 10.
    Tu t'attends donc à avoir la valeur 11 pour une nouvelle insertion. Si tu es le seul utilisateur de la base de données, alors il y a toutes les chances que tu ais cette valeur pour ta prochaine insertion….
    Mais si plusieurs utilisateurs font la même insertion au même moment, alors il n'y a qu'une chance sur n que cette valeur soit celle que tu attends…. n étant le nombre d'utilisateurs qui ont lancés simultanément la même requête !
    Même chose si tu force une valeur particulière… Un autre utilisateur peut aussi forcer cette même valeur particulière !

    La plupart des développeurs oublient systématiquement les problématiques d'accès concurrentiels et se croient seul au monde quand ils pissent du code, ce qui souvent conduit à des désastres !

    Autre problématique : les auto incréments ne sont pas transactionnés pour des raisons d'efficacité et par ce que, comme ce sont des valeurs arbitraires, il n'y en a pas besoin…
    Aussi en cas de ROLLBACK lors de l'insertion, la valeur de l'auto incrément est perdu…

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 091
    Par défaut
    Avez-vous essayé la solution proposée par Sylvercis (.htaccess) ?

    La redirection permanente dans le document html est une astuce que je n'utilise pas dans ce contexte.
    L'adresse de redirection est une autre url que celle du document html.

    A vrai dire, hors virtualHost et ".htaccess", je ne sais pac comment forcer le protocole à HTTPS.

  8. #8
    Membre Expert
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 771
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Avez-vous essayé la solution proposée par Sylvercis (.htaccess) ?
    Pas encore... je ne sais pas non plus comment se gère ce fichier .htaccess chez online.net...

    La redirection permanente dans le document html est une astuce que je n'utilise pas dans ce contexte.
    L'adresse de redirection est une autre url que celle du document html.
    C'est donc normal que ça boucle dans mon cas !

    En tout cas, merci pour toutes ces infos !

  9. #9
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 091
    Par défaut
    Salut à tous.

    Citation Envoyé par Sylvercis
    Auto-incrément à partir de zéro
    Un auto incrément sous mysql commence obligatoirement à 1.

    Citation Envoyé par Tatayo
    D'après l'aide en ligne de MySQL, ça devrait fonctionner si l'option NO_AUTO_VALUE_ON_ZERO est activée.
    Cette astuce de MySql n'est pas du tout recommandé en ce qui concerne le stockage de la valeur 0.

    Citation Envoyé par Sylvercis
    Est ce que c'est très mal d'utiliser l'id 0 sur une table ? Et pourquoi?
    Le problème est que vous utilisez cette colonne "id" comme clef primaire.
    Or cette colonne est un auto incrémenté, c'est-à-dire une colonne dont le but est d'attribuer un numéro séquentiel pour un usage technique.
    Et cet usage (clef primaire) est de rendre chaque ligne unique.

    De plus, vous attribuez un rôle particulier à l'une de ces valeurs, qui en soit est une mauvaise idée en tant que clef primaire.
    Ou si vous préférez, vous ne devez pas attribuer une signification particulère à l'une de vos valeurs.

    Citation Envoyé par Sylvercis
    j'hésite a les utiliser car si il faut tricher pour y arriver c'est qu'il doit y avoir un problème structurel au départ.
    C'est très bien, vous avez pris conscience que vous avez mal posé votre problème.

    Votre problème est le suivant :
    comment attribuer une valeur par défaut à vos DVD quand la langue est "aucune" ?

    Je comprends mieux pourquoi vous avez choisi la valeur 0.
    Dans le contexte ou vous vous trouvez, vous ne pouvez pas utiliser ce 0, il faut lui attribuer une autre valeur.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `langue`
    --------------
     
    --------------
    CREATE TABLE `langue`
    ( `id`       integer unsigned not null auto_increment primary key,
      `suffixe`  char(02)         not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `langue` (`suffixe`) values
      ('fr'),('en'),('es'),('pl'),('de'),('..')
    --------------
     
    --------------
    select * from `langue`
    --------------
     
    +----+---------+
    | id | suffixe |
    +----+---------+
    |  1 | fr      |
    |  2 | en      |
    |  3 | es      |
    |  4 | pl      |
    |  5 | de      |
    |  6 | ..      |
    +----+---------+
    --------------
    DROP TABLE IF EXISTS `dvd`
    --------------
     
    --------------
    CREATE TABLE `dvd`
    ( `id`          integer unsigned not null auto_increment primary key,
      `fk_langue`   integer unsigned not null default 6,
      CONSTRAINT `FK_LANGUE` FOREIGN KEY (`fk_langue`) REFERENCES `langue` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `dvd` (`fk_langue`) values
      (1),(3),(4),(default),(default),(5)
    --------------
     
    --------------
    select * from `dvd` order by id
    --------------
     
    +----+-----------+
    | id | fk_langue |
    +----+-----------+
    |  1 |         1 |
    |  2 |         3 |
    |  3 |         4 |
    |  4 |         6 |
    |  5 |         6 |
    |  6 |         5 |
    +----+-----------+
    --------------
    select      t1.id,
                t2.suffixe
     
          from  `dvd` as t1
     
    inner join  `langue` as t2
            on  t2.id = t1.fk_langue
     
      order by  t1.id
    --------------
     
    +----+---------+
    | id | suffixe |
    +----+---------+
    |  1 | fr      |
    |  2 | es      |
    |  3 | pl      |
    |  4 | ..      |
    |  5 | ..      |
    |  6 | de      |
    +----+---------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    Cela n'a aucune important que la valeur par défaut ne soit pas zéro.
    Dans la table "dvd", s'il n'y a pas de langue, il suffit de préciser "default" lors de l'insertion.
    Et dans ce cas, il sera attribué "6", c'est-à-dire le suffixe '..', comme on peut le voir dans la requête finale.

    @+

  10. #10
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 091
    Par défaut
    Salut à tous.

    Citation Envoyé par Sylvercis
    Mettre l'id 6 par défaut est une bonne idée mais cela ne conviendrai pas dans mon cas:
    Je comprends votre dilemme. Mettre en 1 ne serait pas mieux car vous désirez le réserver pour "français".

    Citation Envoyé par Sylvercis
    par defaut il me faudrai plutot utiliser "NULL".
    Il est possible d'utiliser le NULL qui je le rappelle n'est pas une valeur, mais une absence de valeur.
    Sa signification sera alors "pas de langue" ou encore "aucune langue ne convient".

    Je comprends que vous ayez des contraintes, même si à mes yeux, elles ne sont pas justifiées.
    Je déconseille l'usage du zéro, que je remplacerais par celle du NULL.
    En modifiant mon exemple, voici ce que cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `langue`
    --------------
     
    --------------
    CREATE TABLE `langue`
    ( `id`       integer unsigned not null auto_increment primary key,
      `suffixe`  char(02)         not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `langue` (`suffixe`) values
      ('fr'),('en'),('es'),('pl'),('de')
    --------------
     
    --------------
    select * from `langue`
    --------------
     
    +----+---------+
    | id | suffixe |
    +----+---------+
    |  1 | fr      |
    |  2 | en      |
    |  3 | es      |
    |  4 | pl      |
    |  5 | de      |
    +----+---------+
    --------------
    DROP TABLE IF EXISTS `dvd`
    --------------
     
    --------------
    CREATE TABLE `dvd`
    ( `id`          integer unsigned not null auto_increment primary key,
      `fk_langue`   integer unsigned     null default NULL,
      CONSTRAINT `FK_LANGUE` FOREIGN KEY (`fk_langue`) REFERENCES `langue` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `dvd` (`fk_langue`) values
      (1),(3),(4),(default),(default),(5)
    --------------
     
    --------------
    select * from `dvd` order by id
    --------------
     
    +----+-----------+
    | id | fk_langue |
    +----+-----------+
    |  1 |         1 |
    |  2 |         3 |
    |  3 |         4 |
    |  4 |      NULL |
    |  5 |      NULL |
    |  6 |         5 |
    +----+-----------+
    --------------
    select      t1.id,
                t2.suffixe
     
          from  `dvd` as t1
     
    inner join  `langue` as t2
            on  t2.id = t1.fk_langue
     
      order by  t1.id
    --------------
     
    +----+---------+
    | id | suffixe |
    +----+---------+
    |  1 | fr      |
    |  2 | es      |
    |  3 | pl      |
    |  6 | de      |
    +----+---------+
    --------------
    select           t1.id,
                     t2.suffixe
     
               from  `dvd` as t1
     
    left outer join  `langue` as t2
                 on  t2.id = t1.fk_langue
     
           order by  t1.id
    --------------
     
    +----+---------+
    | id | suffixe |
    +----+---------+
    |  1 | fr      |
    |  2 | es      |
    |  3 | pl      |
    |  4 | NULL    |
    |  5 | NULL    |
    |  6 | de      |
    +----+---------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    J'ai ajouté une seconde requête afin de faire apparaître le NULL quand la colonne est marquée.
    Du coup, votre dialog en javascript n'est plus nécessaire car le NULL n’apparaît pas dans la première requête.

    Citation Envoyé par Sylvercis
    je peux en déduire que la structure de ma table est correcte?
    OUI, elle est correcte.

    @+

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Par défaut
    @Artemus24
    Je pense que tu n'as pas bien compris mes besoins, soit parce que tu as lu un peu trop vite mes message, soit car je me suis mal exprimé.
    Le dialogue par exemple je ne peux pas m'en passer, c'est lui que je veux alimenter avec les données de la BDD.
    Mais je te remercie quand même pour tes propositions qui ont le mérite d'être détaillées.
    Pour que tu comprenne mieux comment je stocke les données pour les dvd, voilà une partie de ton exemple modifié:

    Au lieu d'une table 'dvd', j'ai une table 'dvd_audio' et une table 'dvd_st'. (je simplifie)
    Et en reprenant ton exemple,en renommant 'dvd en 'dvd_st' (sous titres du dvd) cela donnerai plutot ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    --------------
    select           t1.id,
                     t2.suffixe
     
               from  `dvd_st` as t1
     
    left outer join  `langue` as t2
                 on  t2.id = t1.fk_langue
     
           order by  t1.id
    --------------
     
    +---+------------------+
    | id | id_dvd | sous_titres |
    +---+-----------------+
    |  1 | 1 | fr      |
    |  2 | 1 | en     |
    |  3 | 2 | fr      |
    |  4 | 2 | en     |
    |  5 | 3 | fr      |
    |  6 | 4 | ..      |
    |  7 | 6 | fr      |
    |  8 | 6 | en     |
    |  9 | 6 | de     |
    +---+----------+
    edit: la requête est fausse du coup mais j'ai la flemme de la corriger, le résultat est assez parlant.

    Le dvd 4 n'a "aucun" sous titres
    Les autres ont une ou plusieurs pistes de sous titres

    Pour le dvd 5, si il existe dans la base de données, il peut avoir d'autres données enregistrées dans d'autres tables mais ici il n'y a pas de données le concernant, on en déduis que sa fiche est incomplète au niveau des sous titres.
    On pourra toujours indiquer plus tard si il ne contient pas de sous titres ou quel sont les pistes de sous titres qu'il contient.

    Du coup je n'ai jamais besoin d'une ligne contenant "NULL".
    Je n'ai pas non plus besoin d'une valeur par defaut puisqu'il suffit que cette table ne contienne pas de données concernant un dvd pour savoir... euh .. qu'on ne sait pas le contenu du dvd au niveau des sous titres.

    Pour moi cette façon de stocker les données fonctionne très bien mais c'est possible qu'il y ai une meilleure façon de faire?

    Sinon, après quelques tentatives, j'ai compris que je n'arriverai pas a utiliser le zero en numéro d'id sans risques d'erreur par la suite (notamment lors de l'exportation de la base en local vers mon hébergeur).

    Et puis en écrivant ce message, je viens de me rendre compte que si je voulais tellement utiliser le numéro id "0" pour reconnaitre la langue "aucun" c'est parce que je fais du multi langue et qu'autrement que par l'id ça ne serai pas possible normalement.
    ex:
    french, français, .....
    none, aucun, ...
    etc...

    Mais en fait j'avais déjà trouvé une solution il y a longtemps pour palier à ce problème: les suffixes.
    Il suffit que je fasse une jointure lorsque je récupère les langues traduites pour récupérer les suffixes en même temps.

    je pense donc avoir résolu mon problème, même si ça ne me plais pas trop d'avoir le langage "aucun" en plein milieu des autres langues...

  12. #12
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 091
    Par défaut
    Salut Sylvercis.

    Citation Envoyé par Sylvercis
    Je pense que tu n'as pas bien compris mes besoins,
    C'est fort possible car je passe peu de temps à lire vos messages, alors que vous êtes à plein temps sur votre problème.

    Citation Envoyé par Sylvercis
    je te remercie quand même pour tes propositions qui ont le mérite d'être détaillées.
    Merci c'est sympathique de ta part.

    Citation Envoyé par Sylvercis
    edit: la requête est fausse du coup mais j'ai la flemme de la corriger, le résultat est assez parlant.
    Ce n'est pas un problème de requête mais de construction de votre modélisation.

    Vous devez créer une table associative de nom "sous-titre", avec deux clef étrangères :
    --> "fk_dvd" qui va pointer sur le descriptif du DVD.
    --> "fk_langue" qui va pointer sur la table des langues.

    Et ces deux clefs étrangères peuvent former votre clef primaire.

    Explication :

    1) quand il existe une ou plusieurs langues pour un DVD, il suffit de rentrer le couple (fk_dvd, fk_langue) dans la table associative "sous-titre".
    Comme on peut le constater, le couple (fk_dvd, fk_langue) est unique et sert donc de clef primaire pour la table association "sous-titre".

    2) s'il n'existe pas de langue pour un "DVD" donnée, il suffit tout simplement de ne pas le renseigner.
    On fait l'économie d'une ligne dans la table association "sous-titre", et l'on n'utilise pas, non plus, le marquage NULL.

    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `langue`
    --------------
     
    --------------
    CREATE TABLE `langue`
    ( `id`       integer unsigned not null auto_increment primary key,
      `suffixe`  char(02)         not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `langue` (`suffixe`) values
      ('fr'),('en'),('es'),('pl'),('de')
    --------------
     
    --------------
    select * from `langue`
    --------------
     
    +----+---------+
    | id | suffixe |
    +----+---------+
    |  1 | fr      |
    |  2 | en      |
    |  3 | es      |
    |  4 | pl      |
    |  5 | de      |
    +----+---------+
    --------------
    DROP TABLE IF EXISTS `dvd`
    --------------
     
    --------------
    CREATE TABLE `dvd`
    ( `id`          integer unsigned not null auto_increment primary key,
      `libelle`  varchar(255)        not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `dvd` (`libelle`) values
      ('DVD N°1'),('DVD N°2'),('DVD N°3'),('DVD N°4'),('DVD N°5'),('DVD N°6')
    --------------
     
    --------------
    select * from `dvd`
    --------------
     
    +----+---------+
    | id | libelle |
    +----+---------+
    |  1 | DVD N°1 |
    |  2 | DVD N°2 |
    |  3 | DVD N°3 |
    |  4 | DVD N°4 |
    |  5 | DVD N°5 |
    |  6 | DVD N°6 |
    +----+---------+
    --------------
    DROP TABLE IF EXISTS `sous-titre`
    --------------
     
    --------------
    CREATE TABLE `sous-titre`
    ( `fk_dvd`      integer unsigned not null,
      `fk_langue`   integer unsigned not null,
      CONSTRAINT `FK_DVD`    FOREIGN KEY (`fk_dvd`)    REFERENCES `dvd`    (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `FK_LANGUE` FOREIGN KEY (`fk_langue`) REFERENCES `langue` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
      primary key (fk_dvd,fk_langue)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `sous-titre` (`fk_dvd`,`fk_langue`) values
      (1,1),(1,2),
      (2,1),(2,2),
      (3,1),
      (6,1),(6,2),(6,5)
    --------------
     
    --------------
    select * from `sous-titre` order by fk_dvd, fk_langue
    --------------
     
    +--------+-----------+
    | fk_dvd | fk_langue |
    +--------+-----------+
    |      1 |         1 |
    |      1 |         2 |
    |      2 |         1 |
    |      2 |         2 |
    |      3 |         1 |
    |      6 |         1 |
    |      6 |         2 |
    |      6 |         5 |
    +--------+-----------+
    --------------
    select           t1.fk_dvd,
                     t2.libelle,
                     t1.fk_langue,
                     t3.suffixe
     
               from  `sous-titre` as t1
     
    left outer join  `dvd`    as t2
                  on  t2.id = t1.fk_dvd
     
    left outer join  `langue` as t3
                  on  t3.id = t1.fk_langue
     
            order by  t1.fk_dvd, t1.fk_langue
    --------------
     
    +--------+---------+-----------+---------+
    | fk_dvd | libelle | fk_langue | suffixe |
    +--------+---------+-----------+---------+
    |      1 | DVD N°1 |         1 | fr      |
    |      1 | DVD N°1 |         2 | en      |
    |      2 | DVD N°2 |         1 | fr      |
    |      2 | DVD N°2 |         2 | en      |
    |      3 | DVD N°3 |         1 | fr      |
    |      6 | DVD N°6 |         1 | fr      |
    |      6 | DVD N°6 |         2 | en      |
    |      6 | DVD N°6 |         5 | de      |
    +--------+---------+-----------+---------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    L'absence de lignes dans la tables association "sous-titre" peut prendre deux significations :
    --> je n'ai pas fini de remplir les informations concernant ce DVD car je ne connais pas encore toutes les langues (fiche incomplète, voir DVD N°5).
    --> pas de langue pour ce dvd (voir DVD N°4).

    Si cela a de l'importance, vous devrez gérer cette distinction entre fiche incomplète et pas de langue.

    @+

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Par défaut
    C'est exactement la structure de mes tables, j'ai aussi une table d'association 'sous_titres'.
    La grosse différence c'est que je n'ai fait aucune liaison a l'aide de clé primaire et clé etrangères comme tu l'as fais ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     CONSTRAINT `FK_DVD`    FOREIGN KEY (`fk_dvd`)    REFERENCES `dvd`    (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
     CONSTRAINT `FK_LANGUE` FOREIGN KEY (`fk_langue`) REFERENCES `langue` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
    Je comprends le principe et l’intérêt mais ça reste encore très vague pour moi. Actuellement je suis incapable de définir ces clés moi même, bien que sur le principe ce n'est pas si compliqué.
    Il faudrait que je passe beaucoup de temps a étudier les cours sur les bases de données, m'exercer...

    J'avais d'ailleurs commencé a modéliser ma base de données sur MySQL Workbench mais ça me demandais de modifier un peu trop la structure que j'avais défini au départ si je voulais utiliser partout des liaisons à l'aide de clés.
    Cela m'aurai demandé beaucoup trop de travail en plus juste pour revoir la BDD alors qu'elle est déjà suffisamment opérationnelle selon moi et que j'ai tellement a faire dans les autres modules du site.

    Le problème c'est que pour php, javascript, css, html, etc... c'est la même chose et si je devais d'abord tout maitriser parfaitement avant de me lancer je ne ferai rien avant des années.
    Et puis je préfère apprendre en travaillant sur un projet qui m’intéresse plutôt que sur des exercices qui finissent à la poubelle.

    Donc pour le moment je vais a l'essentiel et je compense mon manque de connaissances par plus de rigueur lors de mes accès à la base de données.
    Ce n'est pas non plus la base de données de google donc c'est gérable par un humain.

    Plus tard, quand le site sera suffisamment opérationnel, je re-modéliserai tout cela progressivement à l'aide de MySQL Workbench.
    Je sais qu'au final ça me demandera encore plus de travail d'y revenir plutôt que de le faire parfaitement dés le départ mais ma priorité est déjà de rendre le site opérationnel.

  14. #14
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 668
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    @Sylvercis : si la mise en oeuvre des contraintes d'intégrité peut sembler compliquée, dans les faits il n'en est rien et c'est surtout indispensable pour garantir la qualité des informations stockées dans la base de données. Une base de données dont les informations ne sont pas fiables n'a aucun intérêt. Imaginez une facture dont le montant total ne correspond pas à la somme des montants de chaque ligne.
    Ce serait une anomalie grave et passible d'amendes voir de peines de prison ! Or, dans une base de données sans contrainte d'intégrité, ce genre de situation est possible.
    En effet, dans un contexte multi-utilisateur et multi-taches seul le moteur de la base de données est en mesure de vérifier l'intégrité au travers des contraintes.
    Un traitement ne peut jamais effectuer ce travail correctement (à part dans un contexte mono utilisateur et encore).

    La bonne nouvelle c'est qu'il existe des logiciels qui permettent de modéliser les BDD. Certains sont gratuits. Ces logiciels mettent eux même en oeuvre les contraintes sans que l'utilisateur aie besoin de s'en soucier (du moins pour l'essentiel, quelques réglages restent à faire en général sur le script généré).
    Parmi les logiciels gratuits, je peux vous recommander l'excellent Looping.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Parmi les logiciels gratuits, je peux vous recommander l'excellent Looping.
    Merci pour le conseil.
    J'ai essayer de le telecharger ici: http://www.looping-mcd.fr
    mais mon anti-virus bloque le telechargement:
    La page Web figure dans la liste des sites Web comportant du contenu potentiellement dangereux.
    Il faudrait que je désactive mon anti virus pour y accéder et je ne suis pas très tenté.

  16. #16
    Membre Expert
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 771
    Par défaut
    Bonjour,

    En tant qu'auteur du logiciel Looping, je peux vous garantir que vous ne risquez rien en le téléchargeant, comme l'ont déjà fait des milliers d'utilisateurs.

    Bon courage !

  17. #17
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 091
    Par défaut
    Salut à tous.

    Citation Envoyé par Sylvercis
    Je pense que ce lien est blacklisté car je suis bloqué avant d'y accéder.
    Il ne faut pas dire n'importe quoi !

    J'ai récupéré les adresses ip (IPv4 & IPv6) depuis chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    C:\>nslookup -type=all looping-mcd.fr
    Serveur :   box
    Address:  192.168.1.1
     
    Réponse ne faisant pas autorité :
    looping-mcd.fr  text =
     
            "v=spf1 include:spf.online.net ?all"
    looping-mcd.fr  MX preference = 20, mail exchanger = mx-cache.online.net
    looping-mcd.fr  MX preference = 10, mail exchanger = mx.online.net
    looping-mcd.fr
            primary name server = ns0.online.net
            responsible mail addr = hostmaster.looping-mcd.fr
            serial  = 2017072502
            refresh = 10800 (3 hours)
            retry   = 3600 (1 hour)
            expire  = 604800 (7 days)
            default TTL = 3600 (1 hour)
    looping-mcd.fr  AAAA IPv6 address = 2001:bc8:4::3
    looping-mcd.fr  nameserver = ns0.online.net
    looping-mcd.fr  nameserver = ns1.online.net
    looping-mcd.fr  internet address = 62.210.16.62
     
    C:\>
    Puis en passant par le site "mon ip", j'ai vérifié si c'était le cas :
    --> https://mon-ip.net/ip-blacklist.php?ip=62.210.16.62
    --> https://mon-ip.net/ip-blacklist.php?...bc8%3A4%3A%3A3

    --> https://www.spamhaus.org/query/ip/62.210.16.62
    --> https://www.spamhaus.org/query/ip/20...3A4%253A%253A3

    je constate qu ce n'est pas le cas.

    @+

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Il ne faut pas dire n'importe quoi !


    Artemus, si tu avais bien lu mes messsages, tu aurais vu que je parlais d'un problème d'anti-virus.
    Quand je dis black listé c'est uniquement au niveau de l'anti-virus, en l’occurrence ESET.

    Ils possèdent leur propre base de virus et également leur propre liste de page internet considérés comme dangereuses.
    Je ne vois pas dans tes tests de liens avec ESET.

    Tes tests concernent les problèmes de SPAM. Si son site était black-listé comme un Spammeur cela provoquerai uniquement une impossibilité pour Patrick d'envoyer des emails depuis son site, ce qui n'a rien a voir avec l'hebergement de fichier.
    De plus, si le site n'est pas référencé comme un spammeur la où tu as été voir, cela ne prouve pas qu'il n'est pas black-listé sur un serveur d'email en particulier (ex: hotmail.fr). Chaque serveur décide de sa propre politique.
    Et pour finir, tes tests porte uniquement sur le nom de domaine qui je le rappelle pour ceux qui ne l'on toujours pas compris fonctionne très bien même avec mon antivirus.
    Seul l'url pointant vers Looping.exe est bloqué par ESET.

    Je le répète, le logiciel (une fois sur le disque dur) passe très bien dans l'anti-virus ce qui prouve que ESET ne détecte pas la signature d'un virus dedans et que ce fichier en particulier n'est pas répertorié dans une liste de fichier dangereux chez ESET.
    L'url ne passe pas par contre, ce qui indique que cette url est listé quelque part comme dangereuse.

    Je télécharge régulièrement des fichier en .exe sur d'autres sites sans aucun problème, ce qui signifie également que mon anti-virus accepte sans soucis les .exe au telechargement.

  19. #19
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 091
    Par défaut
    Salut à tous.

    Citation Envoyé par Sylvercis
    Artemus, si tu avais bien lu mes messsages, tu aurais vu que je parlais d'un problème d'anti-virus.
    Dans ce cas là, vous vous êtes trompés de mot : https://fr.wiktionary.org/wiki/blacklister

    Blacklister un adresse ip concerne l'anti-spam ou si vous préférez les emails qui sont envoyés en masse pour faire de la publicité.

    Citation Envoyé par Sylvercis
    Quand je dis black listé c'est uniquement au niveau de l'anti-virus, en l’occurrence ESET.
    J'ai fait le test et il ne s'est rien passé de particulier.
    Juste que "windows a protégé votre ordinateur", ce qui est tout à fait normal en tant que sécurité. Pourquoi ? Parce que l'éditeur est inconnu !

    Citation Envoyé par Sylvercis
    Je ne vois pas dans tes tests de liens avec ESET.
    Je ne vais pas installer un anti-virus, juste pour reproduire votre problème.
    Les anti-virus posent fréquemment des problèmes surtout pour ceux qui font du développement.
    Ils reconnaissent des virus, là où se sont simplement des exécutables issus de compilations de programmes sources 'C/C++' que j'ai créés.

    Citation Envoyé par Sylvercis
    Et pour finir, tes tests porte uniquement sur le nom de domaine
    C'est faux car j'ai utilisé l'adresse IPv4 & Ipv6 et non le nom du site.

    Citation Envoyé par Sylvercis
    L'url ne passe pas par contre, ce qui indique que cette url est listé quelque part comme dangereuse.
    Dites moi où ? Cela rendra service à Paprick de connaitre la raison de ce blocage, que je n'ai pas eu chez moi.

    @+

  20. #20
    Membre Expert
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 771
    Par défaut
    Bonsoir,
    Merci Artemus pour avoir vérifié tout ça !
    Ils reconnaissent des virus, là où se sont simplement des exécutables issus de compilations de programmes sources 'C/C++' que j'ai créés.
    Effectivement, le fond du problème est là. Et Looping étant développé en C++, ton analyse se vérifie.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2003] Remise à zéro d'un champ auto-incrémenté
    Par Plume27 dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 01/11/2012, 20h35
  2. mise à zéro champs auto incrémentés
    Par VEUVEAMIOT dans le forum Access
    Réponses: 2
    Dernier message: 24/06/2007, 13h00
  3. Dernière clé auto incrémenté ?
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 15/11/2003, 11h41
  4. [CODE] auto incrémentation ?
    Par Roi dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 25/09/2003, 16h09
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 01h10

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