sql - вставить в несколько таблиц в одном запросе - PullRequest
31 голосов
/ 05 октября 2010

при условии, что у меня есть две таблицы, names и phones и я хочу вставить данные из некоторого ввода в таблицы, в одном запросе - Как это можно сделать?

Пожалуйста, если это возможно, объясните синтаксис.

Ответы [ 4 ]

62 голосов
/ 05 октября 2010

Вы не можете. Однако вы МОЖЕТЕ использовать транзакцию , и оба они должны содержаться в одной транзакции.

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

19 голосов
/ 05 октября 2010

MySQL не поддерживает вставку нескольких таблиц в одном операторе INSERT .Оракул - единственный, кого я знаю об этом, как ни странно ...

INSERT INTO NAMES VALUES(...)
INSERT INTO PHONES VALUES(...)
3 голосов
/ 02 мая 2013

У меня была такая же проблема.Я решаю это с помощью цикла 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 голосов
/ 10 июля 2019

Несколько операторов SQL должны выполняться с помощью функции mysqli_multi_query().

Пример (объектно-ориентированный 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();
?>
...