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

Langage SQL Discussion :

problème avec clee primaire autoincremente


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 59
    Points : 32
    Points
    32
    Par défaut problème avec clee primaire autoincremente
    bonjour,

    voici le code de la table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    create table `intersoc` 
    	(`ID` INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 0, INCREMENT BY 1, NO CACHE )	
    	`numero` int(10) NOT NULL default '',
      	`societes` char(15) NOT NULL default '',
      	`typesoc` char(15) NOT NULL default '',
      PRIMARY KEY  (`ID`)
    );
    j ai repris pour l'autoincremente sur le code fourni dans un post.

    Mais ça marche pas. quelqu un peut m'aider?

    deuxième question quand je dois faire le insert into pour ajouter un enregistrement ça marche commet?

    je dois faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `intersoc` VALUES('ID','numero','societe','typesoc')
    mais la valeur de ID je dois pas la donner car elle s auto incremente, non?
    -==FORCE ET HONNEUR==-

  2. #2
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 84
    Points : 95
    Points
    95
    Par défaut
    Pour gérer mes clés moi je crée une crée une séquence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CREATE SEQUENCE nom_seq 
    START WITH 1 INCREMENT BY ;
    et puis a pour les insertions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT into ****
    VALUES ( non_seq.NEXTVAL , *****) ;

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2002
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2002
    Messages : 177
    Points : 81
    Points
    81
    Par défaut
    Personnellement, j'utilise une séquence et un trigger pour mes clés autoincrémentés...

    La table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create table DEFAUTS  (
       ID_DEFAUT            NUMBER(6)                        not null,
       NOM_DEFAUT           VARCHAR2(50)                     not null,
       constraint CT_PK_DEFAUTS primary key (ID_DEFAUT)
       /
    La séquence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE SEQUENCE seq_defauts;
    le trigger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE TRIGGER trNumerotation_defauts 
    BEFORE INSERT ON defauts 
    FOR EACH ROW 
    BEGIN 
      select seq_defauts.nextval into :new.id_defaut  from dual ; 
    END;
    /
    l'insertion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO DEFAUTS(NOM_DEFAUT) VALUES('DEFAUT1');
    C'est une solution...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO DEFAUTS(NOM_DEFAUT) VALUES('DEFAUT1');
    j'ai pas compris la fin .

    ce qui est entre parenthèse juste avant le DEFAUTS , ça represente quoi la valeur de NOM_DEFAUT que l'on veux entrer dans la table?

    Normalement c'est dans value qu on met les valeurs.

    Plz explication

    edit 1 : j'ai compris le premier quand même de bitou

    edit 2 : j'ai un problème easyphp ne comprend pas creat sequence.
    -==FORCE ET HONNEUR==-

  5. #5
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 54
    Points : 65
    Points
    65
    Par défaut Re: problème avec clee primaire autoincremente
    La syntaxe exacte peut changer suivant le SGBD ou certaines clauses ne pas etre acceptées !
    Le CREATE table proposé est minimaliste

    Tu peux gerer une sequence, ou simplement une IDENTITY.

    La façon "propre" d'inserer des occurences, consiste à lister dans le premier parenthesage les champs concernés :
    ( numero , societe , typesoc )
    puis les valeurs prises dans le deuxieme
    ( 10 , 'societe X' , 'typesoc Y' )
    De cette façon tu n'as pas à donner les valeurs prises par chacun des champs de ta table ( notament ton ID )

    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
     
    create table INTERSOC 
    	( 
                      ID INTEGER GENERATED BY DEFAULT AS IDENTITY ,
    	  numero  int(10)   NOT NULL with default ,
      	  societes char(15) NOT NULL with default ,
      	  typesoc char(15)  NOT NULL with default ,
                      PRIMARY KEY  (ID) 
                    )
    ;
    CREATE UNIQUE INDEX intersoc_ind ON intersoc ( ID )
    ;
    commit
    ;
    INSERT INTO intersoc ( numero , societes , typesoc ) 
                  VALUES (  10 , 'societe X' , 'typesoc Y' )
    ;

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    euh question papounet :

    l'incrementation se fait comment chez toi ?

    grace à create unique index ??

    désolée mais meme avec les cours que j'ai trouvé je suis largué complètement.
    -==FORCE ET HONNEUR==-

  7. #7
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 54
    Points : 65
    Points
    65
    Par défaut Re: problème avec clee primaire autoincremente
    1 > L'auto-increment (un seul par table)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ID INTEGER GENERATED BY DEFAULT AS IDENTITY
    2 > Declaration de contrainte de clef primaire sur ID. Sinon tu pourais modifier les valeurs d'ID ou en inserer en entrainant des doublons.
    3> Obligation de creer un index UNIQUE sur les PRIMARY KEY (du moins sur mon SGBD )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE UNIQUE INDEX intersoc_ind ON intersoc ( ID )
    Attention !!!!! l'auto-increment est sequentiel.
    => Ne pas inserer de valeur explicite pour le champ, type max( ID ) + 1
    sinon "probleme" la valeur n'a aucun effet sur l'auto-increment

    EX: sans PRIMARY KEY ni index unique
    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
     
    INSERT INTO intersoc ( numero , societes , typesoc ) 
                  VALUES (  10 , 'societe X' , 'typesoc Y' ) ;
    INSERT INTO intersoc ( numero , societes , typesoc ) 
                  VALUES (  20 , 'societe X' , 'typesoc Y' ) ;
    INSERT INTO intersoc ( ID , numero , societes , typesoc ) 
                  VALUES (  3 , 30 , 'societe X' , 'typesoc Y' ) ;
    INSERT INTO intersoc ( numero , societes , typesoc ) 
                  VALUES (  40 , 'societe X' , 'typesoc Y' );
     
    SELECT * FROM intersoc ;
    ID numero  societes    typesoc 
     1         10   societe X  typesoc Y 
     2         20   societe X  typesoc Y
     3         30   societe X  typesoc Y
     3         40   societe X  typesoc Y
    ;
    L'insertion explicite de l'ID a 3 est ignorée par l'auto-incrément => Doublon


    Précision: la gestion d'une sequence est sans doute préférable si les utilisateurs et insertions sont nombreux

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 : 21 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    L'auto incrément n'existe pas en SQL...

    Enfin, pas encore, car dans le projet de norme SQL:2003 les séquence et l'identity sont en cours de validation.

    L'auto incrément est donc spécifique aux éditeurs de SGBDR.
    Comme tu n'as pas indiqué avec quel SGBDR tu travaille il est impossible de te répondre clairement.

    En revanche tu trouvera une étude complète à ce sujet à l'URL :
    http://sqlpro.developpez.com/ClefsAu...ClefsAuto.html

    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/ * * * * *

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    pas trop compris à ce que c'était un SGBDR.

    J'utilise easyphp donc mysql.
    -==FORCE ET HONNEUR==-

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    grâce à easyphp j'ai remarqué qu'il pouvait ajouté un attribut avec auto increment.

    voici le code la table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE `intersoc` (
    `ID` INT( 10 ) NOT NULL AUTO_INCREMENT ,
    `numero` INT( 10 ) NOT NULL ,
    `societes` VARCHAR( 50 ) NOT NULL ,
    `typesoc` VARCHAR( 50 ) NOT NULL ,
    PRIMARY KEY ( `ID` ) 
    );
    je me suis dit que vu que j'utilise easyphp , c'est normal que les solutions qu'on m a proposé ne marche pas.(en tout cas j'arrive pas à le faire marcher)

    voici le code de l'insert

    voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql =" INSERT into `intersoc`( numero , societes , typesoc ) 
                  VALUES ('".$numero."','".$nomsoc1."','Maitre d ouvrage')";
    mais ça marche toujour pas :=/

    edit : bah voilà un bon proverbe : quand on cherche on trouve . J'ai donc trouvé

    Cependant est il possible qu'on m'explique simplement ce qu'est un SGBDR. J'ai pas compris sur les cours de sql.

    merci d'avance
    -==FORCE ET HONNEUR==-

  11. #11
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Encore un bon exemple du flou artistique et du mélange des syntaxes qui règne dans ce forum
    Ekmule, tu postes une requête de création qui ressemble à du DB2, on te répond en utilisant une syntaxe Oracle et finalement il s'avère que tu utilises en réalité MySQL !

    La prochaine fois, poste directement dans le forum relatif à ton SGBD, c'est à dire MySQL, ça évitera ce genre de problèmes

    Petit rappel :

    Vu le nombre croissant de messages déplacés, il a été décidé qu'a partir d'aujourd'hui tout message ayant un question relative à un SGBDR spécifique sera purement et simplement verrouillé. En effet ce forum à pour but de répondre à des questions relatives au langage SQL en général ainsi que sur des questions relatives à la conception de schémas(DDL) sans aucune dépendance à un SGBD quelconque.
    http://www.developpez.net/forums/viewtopic.php?t=102419

    PS : SGBDR=Système de Gestion de Bases de Données Relationnel.
    Pensez au bouton

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    pas de problème, il suffit de faire l'erreur une fois pour comprendre le contecte du problème.

    Donc si j'ai bien compris ici on parle de sql que pour ceux qui n'utilise pas mysql.

    Cependant pour moi (desoler de na pas avoir le meme point de vue) le problème était du sql pas du mysql mais il s'avère que j'avais tort et c'était bien un problème specifique à mysql.

    J'en suis dsl mais c'est comme ça qu'on apprend à devenir meilleur.

    a++
    -==FORCE ET HONNEUR==-

  13. #13
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Citation Envoyé par ekmule
    Cependant pour moi (desoler de na pas avoir le meme point de vue) le problème était du sql pas du mysql
    Aucun problème n'est du SQL pur, dans la majorité des requêtes un peu complexes le SGBD a une incidence sur la syntaxe. Et encore plus quand ça concerne des éléments comme les champs auto-incrémentés, les triggers, les procédures stockées...

    Tu peux poser des questions sur des requêtes ici, mais au moins précise le système de base de données que tu utilises. Après il faut bien voir que tu obtiendras forcément des réponses plus rapides et plus ciblées dans le forum spécifique au SGBD en question
    Pensez au bouton

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 59
    Points : 32
    Points
    32
    Par défaut
    Bien reçu

    merci pour l'explication et ta patiance
    -==FORCE ET HONNEUR==-

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec clés primaires et étrangères
    Par mat777 dans le forum JDBC
    Réponses: 0
    Dernier message: 23/01/2009, 15h32
  2. Problème avec une clé primaire
    Par Saten dans le forum Administration
    Réponses: 3
    Dernier message: 23/10/2008, 13h25
  3. Réponses: 4
    Dernier message: 04/01/2008, 22h34
  4. [EJB2.1 Entity] [CMP] [xdoclet] Problème avec les clés primaires
    Par shingo dans le forum Java EE
    Réponses: 1
    Dernier message: 10/02/2006, 16h41
  5. [EJB2.1 Entity] [CMP] [MySQL] Problème avec clé primaire en auto increment
    Par tery dans le forum Java EE
    Réponses: 6
    Dernier message: 16/07/2004, 11h28

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