在mysql數(shù)據(jù)庫中,要往多個(gè)表中插入數(shù)據(jù),可以使用多個(gè)INSERT語句分別對(duì)每個(gè)表進(jìn)行插入,但這樣需要寫很多SQL語句,不太方便,也不利于維護(hù)。而使用INSERT INTO ...SELECT語句則可以一次性往多個(gè)表中插入數(shù)據(jù)。
以學(xué)生和成績兩個(gè)表為例,假設(shè)兩個(gè)表中都有學(xué)生的學(xué)號(hào)字段student_id,需要將學(xué)生和對(duì)應(yīng)的成績插入到對(duì)應(yīng)的表中。可以使用以下SQL語句:
INSERT INTO student(student_id, student_name) SELECT grade.student_id, grade.student_name FROM grade WHERE grade.grade >60; INSERT INTO score(student_id, subject, score) SELECT grade.student_id, grade.subject, grade.score FROM grade WHERE grade.grade >60;
其中,第一條INSERT INTO ...SELECT語句將滿足成績大于60分的學(xué)生的學(xué)號(hào)和姓名插入到student表中;第二條INSERT INTO ...SELECT語句將滿足成績大于60分的學(xué)生成績插入到score表中。這兩條語句可以在同一事務(wù)中執(zhí)行,確保數(shù)據(jù)的一致性。
需要注意的是,INSERT INTO ...SELECT語句的SELECT查詢結(jié)果的字段類型、順序和INSERT INTO的字段一一對(duì)應(yīng),如果不對(duì)應(yīng)會(huì)插入失敗。同時(shí),如果要插入的表中存在自增長字段,應(yīng)該將該字段的值設(shè)置為NULL,讓數(shù)據(jù)庫自動(dòng)生成。