web-dev-qa-db-ja.com

MySQLを使用して外部キーを持つテーブルに値を挿入する方法は?

たとえば、次の2つのテーブルがあります。

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)

これらの2つの場合に挿入する方法を知りたいです。

ケース1-既存の教師を持つ新しい学生を挿入するため、教師名を持つ外部キーを取得する必要があります

ケース2-新しい教師と新しい生徒を挿入します(生徒を作成するのと同時に作成する教師)

20
okami

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つの個別の挿入ステートメントを実行するだけです。

21
Imre L

ケース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のディメンションテーブルとファクトテーブルにインポートし、次から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()
_
15

事例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 docs

INSERT INTO tab_teacher (name_teacher) 
    VALUES ('tom stills')
INSERT INTO tab_student (name_student, id_teacher_fk)
    VALUES ('rich man', LAST_INSERT_ID())
3
DonCross