Как вставить значения в таблицу с внешним ключом, используя MySQL? - PullRequest
20 голосов
/ 23 января 2011

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

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)

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

СЛУЧАЙ 1 - ВСТАВИТЬ нового ученика с уже существующим УЧИТЕЛЕМ, поэтому я должен получить внешний ключ с именем учителя

СЛУЧАЙ 2 - ВСТАВИТЬ нового ученика с новым УЧИТЕЛЕМ (учитель, которого я создаю, одновременно создавая ученика)

Ответы [ 3 ]

21 голосов
/ 23 января 2011

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 отдельных оператора вставки

15 голосов
/ 18 мая 2016

Случай 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 таблицы из следующих элементов:

enter image description here

Случай 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()
3 голосов
/ 03 марта 2018

Дело 1

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

Рекомендуется хранить значения в нижнем регистре, чтобы сделать поиск более простым и менее подверженным ошибкам

Дело 2

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())
...