Mysql: как вставлять значения в таблицу с внешним ключом

У меня есть эти две таблицы, например:

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)

Я хочу знать, как вставлять в эти два случая:

CASE 1- INSERT новый ученик с pre-existin TEACHER, поэтому мне нужно получить внешний ключ с именем учителя

CASE 2- INSERT новый ученик с новым TEACHER (учитель, которого я создаю в то же время, я создаю ученика)

Ответы

Ответ 1

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

Для 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

Для case2 вам просто нужно сделать 2 отдельных оператора вставки

Ответ 2

Случай 1: ввод строки и внешнего ключа запроса

Вот альтернативный синтаксис, который я использую:

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

Я делаю это в Excel, чтобы импортировать сводную таблицу в таблицу измерений и таблицу фактов в SQL, чтобы вы могли импортировать таблицы bost department и expenses из следующего:

введите описание изображения здесь

Случай 2: Вставить строку и затем вставить зависимую строку

К счастью, MySQL поддерживает 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()