43 votes

Comment insérer des valeurs dans une table avec clé étrangère en utilisant MySQL ?

J'ai ces deux tableaux à titre d'exemple :

TAB_TEACHER
- id_teacher   // primary key, autoincrement
- name_teacher // a varchar

TAB_STUDENT
- id_student    // primary key, autoincrement
- name_student  // a varchar
- id_teacher_fk // foreign key reference to a teacher (TAB_TEACHER)

Je voudrais savoir comment insérer dans ces deux cas :

CAS 1 - INSERER un nouvel étudiant avec un enseignant préexistant, je dois donc obtenir la clé étrangère avec le nom de l'enseignant.

CAS 2 - INSERER un nouvel élève avec un nouvel ENSEIGNANT (l'enseignant que je crée en même temps que l'élève)

32voto

Imre L Points 4130

http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

Pour le cas 1 :

INSERT INTO TAB_STUDENT(name_student, id_teacher_fk)
SELECT 'Joe The Student', id_teacher
  FROM TAB_TEACHER
 WHERE name_teacher = 'Professor Jack'
 LIMIT 1

Pour le cas 2, il suffit de faire deux déclarations d'insertion distinctes.

31voto

Full Decent Points 4453

Cas 1 : Insertion d'une ligne et interrogation d'une clé étrangère

Voici une autre syntaxe que j'utilise :

INSERT INTO tab_student 
   SET name_student = 'Bobby Tables',
       id_teacher_fk = (
       SELECT id_teacher
         FROM tab_teacher
        WHERE name_teacher = 'Dr. Smith')

Je fais cela dans Excel pour importer un tableau croisé dynamique dans un tableau de dimensions et un tableau de faits dans SQL afin que vous puissiez importer dans les deux. department y expenses parmi les tableaux suivants :

enter image description here

Cas 2 : Insertion d'une ligne puis insertion d'une ligne dépendante

Heureusement, MySQL prend en charge LAST_INSERT_ID() exactement à cette fin.

INSERT INTO tab_teacher
   SET name_teacher = 'Dr. Smith';
INSERT INTO tab_student 
   SET name_student = 'Bobby Tables',
       id_teacher_fk = LAST_INSERT_ID()

17voto

Francis Points 97

Cas 1

INSERT INTO tab_student (name_student, id_teacher_fk)
    VALUES ('dan red', 
           (SELECT id_teacher FROM tab_teacher WHERE name_teacher ='jason bourne')

il est conseillé de stocker les valeurs en minuscules pour faciliter la recherche et réduire les risques d'erreur.

Cas 2

mysql docs

INSERT INTO tab_teacher (name_teacher) 
    VALUES ('tom stills')
INSERT INTO tab_student (name_student, id_teacher_fk)
    VALUES ('rich man', LAST_INSERT_ID())

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X