webentwicklung-frage-antwort-db.com.de

Mysql: Einfügen von Werten in eine Tabelle, die einen Fremdschlüssel enthält

Ich habe diese zwei Tabellen nur zum Beispiel:

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)

Ich möchte wissen, wie man in diesen beiden Fällen einfügt:

FALL 1- Ein neuer Student mit einem bereits existierenden LEHRER einfügen, also muss ich den Fremdschlüssel mit einem Lehrernamen bekommen

FALL 2- EINFÜGEN eines neuen Schülers mit einem neuen LEHRER (der Lehrer, den ich gerade erstelle, wenn ich den Schüler erstelle)

19
okami

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

Für case1:

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

Für case2 müssen Sie nur zwei separate insert-Anweisungen ausführen

20
Imre L

Fall 1: Zeile einfügen und Fremdschlüssel abfragen

Hier ist eine alternative Syntax, die ich verwende:

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

Ich tue dies in Excel, um eine Pivot-Tabelle in eine Dimensionstabelle und eine Faktentabelle in SQL zu importieren, damit Sie aus den folgenden Tabellen department- und expenses-Tabellen importieren können:

 enter image description here

Fall 2: Zeile einfügen und dann abhängige Zeile einfügen

Zum Glück unterstützt MySQL genau zu diesem Zweck LAST_INSERT_ID().

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

Fall 1

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

Es ist ratsam, Ihre Werte in Kleinbuchstaben zu speichern, um das Abrufen einfacher und weniger fehleranfällig zu machen. 

Fall 2

MySQL-Dokumente

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