2010-10-05 42 views
31

假設我有兩個表,namesphones 並且我想在某個查詢中將某些輸入的數據插入到表中 - 它如何完成?sql - 在一個查詢中插入多個表

如果可以,請解釋語法。

+0

我猜對於所有的數據庫,答案都是「你不能」,但爲了以防萬一,你在使用什麼數據庫? – LittleBobbyTables 2010-10-05 01:27:26

+0

mysql,最新版本(我看到一些解決方案使用「output」作爲那個工作,但我更喜歡避免漫步..) – yossi 2010-10-05 01:30:32

回答

19

MySQL不支持在單個INSERT statement中插入多表。甲骨文是我知道的唯一一個,奇怪...

INSERT INTO NAMES VALUES(...) 
INSERT INTO PHONES VALUES(...) 
+7

Joshua Smith的答案比這個更好。 – 2015-09-24 14:44:38

60

你不能。但是,您可以使用交易並將它們都包含在一個事務中。

START TRANSACTION; 
INSERT INTO table1 VALUES ('1','2','3'); 
INSERT INTO table2 VALUES ('bob','smith'); 
COMMIT; 

http://dev.mysql.com/doc/refman/5.1/en/commit.html

+1

乾杯約書亞,這幫助了我很多。雖然在MySql中,我認爲這是START而不是BEGIN。 – steve 2012-10-31 16:07:57

+2

交易的目的是什麼?我收集說,如果在其中的一個查詢出現問題,那麼所有查詢都會回滾。是嗎?還是在性能方面也有所提高? – Clox 2013-05-11 09:10:52

+3

@Clox:這部分是交易的目的。另一個目的是在事務之前,期間和之後數據庫將處於已知的穩定狀態。這意味着併發查詢將永遠不會看到部分提交的數據。 – 2015-10-21 16:18:01

3

我有同樣的問題。我用for循環解決它。

例子:

如果我想在2和相同表寫,用循環

for x = 0 to 1 

if x = 0 then TableToWrite = "Table1" 
if x = 1 then TableToWrite = "Table2" 
    Sql = "INSERT INTO " & TableToWrite & " VALUES ('1','2','3')" 
NEXT 

要麼

ArrTable = ("Table1", "Table2") 

for xArrTable = 0 to Ubound(ArrTable) 
Sql = "INSERT INTO " & ArrTable(xArrTable) & " VALUES ('1','2','3')" 
NEXT 

如果你有一個小的查詢我不知道這是否是最好的解決方案,但是如果你的查詢非常大,並且它在if/else/case條件下的動態腳本中,這是一個很好的解決方案。

+0

當您必須爲每個表插入相同的值和/或相同數量的值時非常有用。 – 2014-04-30 07:26:03