Retourner aux forums || Retourner au forum Programmation.SQL

Programmation.SQL : FOREIGN KEYS et MySQL....

Posté par David FRANCOIS (page perso, ) le 14 octobre 2006
0
Bonjour, je n'arrive pas à mettre en place une clef étrangère entre deux tables. J'essaye de dire à MySQL de positionner à NULL le champ Personnel.agence en cas d'effacement des lignes de la table Agence et également d'updater la clef étrangère mais ma requête ne passe pas... Petite précision, mes tables sont bien en InnoDB.
+-------------------+
| Tables_in_nf16    |
+-------------------+
| Agence            |
| Locataire         |
| Personnel         |
| Proprietaire      |
| Propriete_a_louer |
| Visite            |
+-------------------+
6 rows in set (0.00 sec)

mysql> DESC Agence;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| numa      | mediumint(9) | NO   | PRI | NULL    | auto_increment |
| adresse   | varchar(255) | NO   |     | NULL    |                |
| telephone | varchar(10)  | NO   |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> DESC Personnel;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| nump     | mediumint(9) | NO   | PRI | NULL    | auto_increment |
| nom      | varchar(50)  | NO   |     | NULL    |                |
| prenom   | varchar(50)  | NO   |     | NULL    |                |
| adresse  | varchar(255) | NO   |     | NULL    |                |
| fonction | varchar(30)  | NO   |     | NULL    |                |
| salaire  | mediumint(9) | NO   |     | NULL    |                |
| agence   | mediumint(9) | NO   | MUL | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

mysql> ALTER TABLE Agence ADD FOREIGN KEY numa REFERENCES Personnel(agence) ON DELETE SET NULL ON UPDATE CASCADE;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'REFERENCES Personnel(agence) ON DELETE SET NULL ON UPDATE CASCADE' at line 1

--
Save the planet, kill yourself.
> Lire le message (6 commentaires, moyenne: 1,3).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

NB

Posté par David FRANCOIS (page perso, ) le 14/10/2006 à 10:29. (lien). Évalué à 1.

Même après avoir rajouté le CONSTRAINT entre ADD et FOREIGN ca ne marche pas.

--
Save the planet, kill yourself.

Problème de syntaxe

Posté par FReEDoM (page perso, ) le 14/10/2006 à 11:47. (lien). Évalué à 2.

Essaye ça :
alter table Agence add constraint foreign key (numa) references Personnel(agence) on delete set null;


ou ça (mais je pense que ça efface toute la ligne) :
alter table Agence add constraint foreign key (numa) references Personnel(agence) on delete cascade;

  • [^]Re: Problème de syntaxe

    Posté par David FRANCOIS (page perso, ) le 14/10/2006 à 13:50. (lien). Évalué à 1.

    Ca me donne ca... J'ai essayé aussi l'inverse...

    mysql> alter table Agence add constraint foreign key (numa) references Personnel(agence) on delete set null;
    ERROR 1005 (HY000): Can't create table './nf16/#sql-1d36_28d0.frm' (errno: 150)
    
    mysql> alter table Personnel add constraint foreign key (agence) references Agence(numa) on delete set null;
    ERROR 1005 (HY000): Can't create table './nf16/#sql-1d36_28d0.frm' (errno: 150)

    --
    Save the planet, kill yourself.
    • [^]Histoire d'index ?

      Posté par d-jo (page perso, ) le 14/10/2006 à 16:43. (lien). Évalué à 2.

      http://mysql.ifrance.com/showthread.php?t=252

      Google est ton ami ;-)

      • [^]Re: Histoire d'index ?

        Posté par David FRANCOIS (page perso, ) le 14/10/2006 à 17:18. (lien). Évalué à 1.

        J'avais déjà mis en oeuvre la solution préconisée par ces pages, sans succès.
        Mes champs de clef étrangère ont déjà un index. :(
        Quelqu'un a une autre idée ?

        --
        Save the planet, kill yourself.

Mauvaise table ?

Posté par Korbinus (page perso, ) le 30/10/2006 à 22:25. (lien). Évalué à 1.

Salut, C'est bien la table Personnel qui logiquement devrait avoir la clé étrangère, n'est-ce pas ? Alors le code SQL devrait être quelque chose comme: ALTER TABLE Personnel ADD FOREIGN KEY numa_fk (agence) REFERENCES Agence(numa) ON DELETE SET NULL ON UPDATE CASCADE; Bon je n'ai pas testé le code, mais je ne pense pas me tromper de beaucoup :-p

--
*** Korbinus ***
mon blog
geo:truc
Docs'n'Hacks
Documentation and Hacks at your fingertips

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.SQL