web-dev-qa-db-fra.com

Mysql: Comment insérer des valeurs dans une table qui a une clé étrangère

J'ai ces deux tables juste par 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 veux savoir comment insérer dans ces deux cas:

CAS 1- Insérez un nouvel étudiant avec un enseignant pré-existant

CAS 2- INSÉRER un nouvel étudiant avec un nouvel ENSEIGNANT

19
okami

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

Pour le cas1:

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 case2, il vous suffit de faire 2 instructions d'insertion distinctes

20
Imre L

Cas 1: Insérer une ligne et une clé étrangère de requête

Voici une syntaxe alternative 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 une table de dimension et une table de faits en SQL afin que vous puissiez importer dans les tables bost department et expenses parmi:

 enter image description here

Cas 2: Insérer une ligne puis Insérer une ligne dépendante

Heureusement, MySQL supporte 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()
15
William Entriken

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 vos valeurs en minuscules pour faciliter la récupération et réduire le risque d'erreur 

Cas 2

documentation mysql

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