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 :

Renommer un champ et ajouter une clé étrangère à une table


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 35
    Points
    35
    Par défaut Renommer un champ et ajouter une clé étrangère à une table
    Bonsoir,

    j'ai actuellement la table suivante :
    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 tTable1 (
    		table1_i_id	BIGINT		UNSIGNED	NOT NULL,
    		table1_i_subref	INT		UNSIGNED	NOT NULL,
    		table1_i_key	MEDIUMINT	UNSIGNED,
    		table1_t_updated	TIMESTAMP,
    		table1_t_received	TIMESTAMP			NOT NULL,
    		use_i_id	INT UNSIGNED	NOT NULL,
    		table1_s_md5sum	CHAR(32)			NOT NULL,
    		table1_ee_stage	SET('photo_exist','archived')	NOT NULL,
    		table1_b_card	TINYINT	UNSIGNED	NOT NULL DEFAULT '0',
    		table1_e_error	ENUM('revoked','blacklisted'),
    		PRIMARY KEY (table1_i_id,table1_i_subref),
    		KEY	    (use_i_id,table1_s_md5sum(4)),
    		INDEX (table1_i_id,table1_t_received),
    		INDEX(table1_i_key)
    ) TYPE=InnoDB;
    Je souhaite obtenir la table suivante :
    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
    CREATE TABLE tTable1 (
      table1_i_id bigint unsigned NOT NULL,
      table1_i_subref int unsigned NOT NULL,
      table1_i_key mediumint unsigned,
      table1_t_updated timestamp,
      table1_t_received timestamp NOT NULL,
      use_i_id int unsigned NOT NULL,
      table1_s_md5sum char(32) NOT NULL,
      table1_ee_stage set('photo_exist','archived') NOT NULL,
      source_i_id INTEGER(3) UNSIGNED NOT NULL ,
      table1_e_error enum('revoked','blacklisted'),
      PRIMARY KEY  (table1_i_id,table1_i_subref),
      KEY (use_i_id,table1_s_md5sum(4)),
      INDEX (table1_i_id,table1_t_received),
      INDEX (table1_i_key),
      KEY (source_i_id),
      FOREIGN KEY(source_i_id) REFERENCES tSource (source_i_id)
    ) TYPE=InnoDB;
    C'est à dire renommer le champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table1_b_card	TINYINT	UNSIGNED	NOT NULL DEFAULT '0',
    en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    source_i_id INTEGER(3) UNSIGNED NOT NULL
    et ajouter ces 2 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    KEY (source_i_id),
      FOREIGN KEY(source_i_id) REFERENCES tSource (source_i_id)
    Est-ce que quelqu'un pourrait m'indiquer comment cela se fait. J'ai essayé plusieurs combinaisaisons d'écriture sans parvenir à obtenir ce que je souhaite.

    Merci

  2. #2
    Membre actif
    Homme Profil pro
    Programmeur Delphi
    Inscrit en
    Octobre 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Programmeur Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 183
    Points : 227
    Points
    227
    Par défaut
    Slt voici une solution
    pour modifier le nom du champ
    il faut ajouter ce nouveau champ dans ta table
    ensuite faire un update de ce nouveau champ avec les valeurs de l'ancienne colonne
    et finalement supprimer l'ancienne colonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLE nomtable ADD COLUMN nomchamp typeduchamp;
    ensuite faire un update du nouveau champ avec les valeurs de l'ancienne colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE nomtable SET newchamp = oldchamp;
    et pour finir, supprimer l'ancienne colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLE nomtable DROP COLUMN nomchamp;

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 35
    Points
    35
    Par défaut
    Salut,

    merci pour la réponse. Je viens de réussir à renommer mon champ et en changeant de type en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql> ALTER TABLE tTable1 CHANGE table1_b_card source_i_id INTEGER(3) UNSIGNED NOT NULL;
    Mais je n'arrive toujours pas à trouver comment faire pour ajouter la clé étrangère ...

  4. #4
    Membre actif
    Homme Profil pro
    Programmeur Delphi
    Inscrit en
    Octobre 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Programmeur Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 183
    Points : 227
    Points
    227
    Par défaut
    slt
    pour insérer une clé étrangère

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLE nomtable ADD FOREIGN KEY (nomchamp) REFERENCES nomtableSource (nomchamp);

  5. #5
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    Citation Envoyé par maxlegrand Voir le message
    Salut,

    merci pour la réponse. Je viens de réussir à renommer mon champ et en changeant de type en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql> ALTER TABLE tTable1 CHANGE table1_b_card source_i_id INTEGER(3) UNSIGNED NOT NULL;
    Mais je n'arrive toujours pas à trouver comment faire pour ajouter la clé étrangère ...
    une simple recherche t'aurais permis de trouver la solution..

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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