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)
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
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:
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()
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.
INSERT INTO tab_teacher (name_teacher)
VALUES ('tom stills')
INSERT INTO tab_student (name_student, id_teacher_fk)
VALUES ('rich man', LAST_INSERT_ID())