web-dev-qa-db-fra.com

sql - insérer dans plusieurs tables en une seule requête

en supposant que j'ai deux tables, names et phones et que je souhaite insérer des données d'une entrée dans les tables, dans une seule requête - Comment cela peut-il être fait?

S'il vous plaît, si cela est possible, expliquez la syntaxe.

31
yossi

MySQL ne prend pas en charge l'insertion de plusieurs tables dans un seul instruction INSERT . Oracle est le seul que je sache, curieusement ...

INSERT INTO NAMES VALUES(...)
INSERT INTO PHONES VALUES(...)
19
OMG Ponies

Tu ne peux pas. Cependant, vous POUVEZ utiliser une transaction et les deux doivent être contenus dans une seule transaction.

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

62
Joshua Smith

J'ai eu le même problème. Je le résous avec une boucle for.

Exemple:

Si je veux écrire dans 2 identiques tables, en utilisant une boucle

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

non plus

ArrTable = ("Table1", "Table2")

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

Si vous avez une petite requête, je ne sais pas si c'est la meilleure solution, mais si vous votre requête est très grande et qu'elle est à l'intérieur d'un script dynamique avec des conditions if/else/case, c'est une bonne solution.

3
Oscar Zarrus

Plusieurs instructions SQL doivent être exécutées avec la fonction mysqli_multi_query().

Exemple (orienté objet 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();
?>
0
bdspice