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

SQL Oracle Discussion :

Modifier la clé primaire (et non sa valeur)


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut Modifier la clé primaire (et non sa valeur)
    Bonjour,

    Tout d'abord désolé si je ne suis pas au bon endroit pour poster, je ne savais pas trop quelle catégorie mon problème touche j'ai donc posté dans le général.

    Voila je suis en train de créer un petit module supplémentaire à une appli que j'avais développé, et j'ai besoin d'ajouter une table.

    Cependant la clé primaire de la table à laquelle je dois la lier ne me convient pas, elle est construite sur trois champs, je voudrais la réduire pour qu'elle ne soit plus que sur un champ (juste le champ id).

    J'ai essayé des trucs du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE ma_table MODIFY PRIMARY KEY(Id);
    (syntaxe trouvée sur internet) mais ça ne marche pas et je ne trouve rien de mieux ...

    Est-ce possible directement ou bien dois-je passer par la suppression de la contrainte pour la recréer ensuite ? (comment faire dans le deuxième cas ? car je ne trouve pas non plus la syntaxe exacte)


    Merci d'avance pour votre aide

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut
    j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE matable DROP PRIMARY KEY;

    et ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE matable ADD CONTRAINT nomcontrainte PRIMARY KEY(id);
    Voila.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Une petite précision toutefois, lors de la génération d'une clef primaire Oracle constituera obligatoirement un index associé.

    Si aucun paramètre n'est défini, cet index ira se loger dans le tablespace par défaut, ce qui n'est pas toujours opportun.

    Vous pouvez utiliser le code suivant pour le diriger au bon endroit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE matable ADD CONSTRAINT PK_nomcontrainte
    PRIMARY KEY ( id )
    USING INDEX TABLESPACE tablespace_idx;
    De même, préfixer ou suffixer ses indexes est une bonne pratique.

  4. #4
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut
    Une petite précision toutefois, lors de la génération d'une clef primaire Oracle constituera obligatoirement un index associé.
    C'est aussi le cas pour les contraintes d'unicité
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Une petite précision toutefois, lors de la génération d'une clef primaire Oracle constituera obligatoirement un index associé.
    ...
    Est vous certain ?
    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
     
    SQL> create table emp1 as select * from emp;
     
    Table crÚÚe.
     
    SQL> create unique index ix_emp1 on emp1(empno);
     
    Index crÚÚ.
     
    SQL> alter table emp1
      2  add constraint pk_emp1 primary key (empno);
     
    Table modifiÚe.
    SQL> r
      1  select index_name
      2  from user_indexes
      3* where table_name = 'EMP1'
     
    INDEX_NAME
    ------------------------------
    IX_EMP1

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Êtes-vous certain ?
    Effectivement, j'ai constaté ça aussi.
    C'est à la création de la table que l'index de la clef primaire est créé, d'après mon test en 10g...
    Mince alors...

    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
    12:39:04 BD> CREATE TABLE AAAAAAAAAAA (
    12:39:04   2      ID      NUMBER NOT NULL,
    12:39:04   3      COLUMN1 VARCHAR2(20)   ,
    12:39:04   4      CONSTRAINT AAAAAAAAAAA_PK PRIMARY KEY ( ID ) ENABLE
    12:39:04   5    ) ;
     
    Table créée.
     
    12:39:05 BD>   SELECT index_name FROM user_indexes WHERE table_name = 'AAAAAAAAAAA';
     
    INDEX_NAME
    ------------------------------
    AAAAAAAAAAA_PK
     
    1 ligne sélectionnée.
    Dernière modification par Invité ; 30/09/2008 à 18h55.

  7. #7
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Une clé primaire a obligatoirement besoin d'un index.

    Lors de l'ajout d'une clé primaire sur une table qui possède déjà un index sont les caractéristiques correspondent à celles requises par une clé primaire (valeur unique + même colonne), pourquoi Oracle irait récréer un nouvel index et donc gaspiller de la place pour rien et faire deux fois le boulot de vérification à chaque DML référençant la clé ?

    Donc, pour peaufiner ce que dit Waldar, je dirais plutôt :
    Une petite précision toutefois, lors de la génération d'une clef primaire Oracle constituera obligatoirement un index associé si un index de même nature n'existe pas pour la table en question
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

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

Discussions similaires

  1. Clés primaires multiples non autorisées ?
    Par ctobini dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 15/02/2007, 15h16
  2. Réponses: 10
    Dernier message: 11/01/2007, 10h22
  3. supprimer ou modifier un clé primaire
    Par tahir dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/10/2006, 08h01
  4. Select list me donne l'index et non la valeur
    Par beegees dans le forum ASP
    Réponses: 3
    Dernier message: 07/09/2006, 09h21
  5. Modifier la surface primaire (avec un filtre)
    Par cemoi dans le forum DirectX
    Réponses: 56
    Dernier message: 01/01/2004, 20h48

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