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