2010-10-05 39 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