如何使用MySQL在外键中插入值?

oka*_*ami 22 mysql foreign-keys insert

我只有这两个表:

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)
Run Code Online (Sandbox Code Playgroud)

我想知道如何插入这两种情况:

案例1 - 使用预先存在的教师插入新学生,因此我必须使用教师姓名获取外键

案例2 - 使用新教师插入新学生(我正在创建学生的同时创建的老师)

Imr*_*e L 22

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
Run Code Online (Sandbox Code Playgroud)

对于case2,您只需要执行2个单独的插入语句


Wil*_*ken 18

案例1:插入行和查询外键

这是我使用的替代语法:

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

我在Excel中执行此操作以将数据透视表导入到维度表和SQL中的事实表,以便您可以从以下内容导入到bost departmentexpenses表:

在此输入图像描述

情况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()
Run Code Online (Sandbox Code Playgroud)

  • 这是最有效的方法吗???如果我想在插入时同时插入多个值怎么办? (2认同)

小智 8

情况1

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

建议以小写形式存储您的值,以使检索更容易且不易出错

案例二

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())
Run Code Online (Sandbox Code Playgroud)