Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql-在一个查询中插入多个表_Sql_Mysql_Multiple Tables_Insert Into - Fatal编程技术网

sql-在一个查询中插入多个表

sql-在一个查询中插入多个表,sql,mysql,multiple-tables,insert-into,Sql,Mysql,Multiple Tables,Insert Into,假设我有两个表,names和phones 我想在一个查询中,将一些输入数据插入到表中,这是如何实现的 如果可以的话,请解释一下语法。MySQL不支持一次插入多个表。Oracle是我所知道的唯一一个这样做的,奇怪的是 INSERT INTO NAMES VALUES(...) INSERT INTO PHONES VALUES(...) 你不能。但是,您可以使用一个事务,并将它们都包含在一个事务中 START TRANSACTION; INSERT INTO table1 VALUES ('1'

假设我有两个表,
names
phones
我想在一个查询中,将一些输入数据插入到表中,这是如何实现的


如果可以的话,请解释一下语法。

MySQL不支持一次插入多个表。Oracle是我所知道的唯一一个这样做的,奇怪的是

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

你不能。但是,您可以使用一个事务,并将它们都包含在一个事务中

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

我也有同样的问题。我用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条件的动态脚本中,这是一个很好的解决方案。

必须使用
mysqli\u multi\u query()函数执行多个SQL语句

示例(MySQLi面向对象):

    <?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "INSERT INTO names (firstname, lastname)
VALUES ('inpute value here', 'inpute value here');";
$sql .= "INSERT INTO phones (landphone, mobile)
VALUES ('inpute value here', 'inpute value here');";

if ($conn->multi_query($sql) === TRUE) {
    echo "New records created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>

我猜所有数据库的答案都是“你不能”,但以防万一,你使用的是什么数据库?mysql,最新版本(我看到一些解决方案使用“输出”来完成这项工作,但我更愿意避免四处走动……)Joshua欢呼,这对我帮助很大。虽然在MySql中,我认为这是开始而不是开始。事务的目的是什么?我推测,如果其中一个查询出错,那么所有查询都将回滚。是这样吗?还是在性能上也有一些提高?@Clox:这部分是交易的目的。另一个目的是,数据库将在事务之前、期间和之后处于已知的稳定状态。这意味着并发查询将永远看不到部分提交的数据。当您必须为每个表插入相同的值和/或相同数量的值时,这将非常有用。Joshua Smith的答案比这个更好。