假设我有两个表,names
并且phones
我想在一个查询中将来自某些输入的数据插入到表中。如何做呢?
问问题
122894 次
6 回答
68
你不能。但是,您可以使用一个事务并将它们都包含在一个事务中。
START TRANSACTION;
INSERT INTO table1 VALUES ('1','2','3');
INSERT INTO table2 VALUES ('bob','smith');
COMMIT;
于 2010-10-05T01:34:39.040 回答
19
MySQL 不支持在单个INSERT 语句中插入多表。奇怪的是,甲骨文是我所知道的唯一一个这样做的人......
INSERT INTO NAMES VALUES(...)
INSERT INTO PHONES VALUES(...)
于 2010-10-05T01:32:42.400 回答
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 条件的动态脚本中,这是一个很好的解决方案。
于 2013-05-02T07:06:47.353 回答
3
老问题,但万一有人觉得它有用……在 Posgresql、MariaDB 和可能的 MySQL 8+ 中,你可能会在不使用 WITH 语句的事务的情况下实现同样的事情。
WITH names_inserted AS (
INSERT INTO names ('John Doe') RETURNING *
), phones_inserted AS (
INSERT INTO phones (id_name, phone) (
SELECT names_inserted.id, '123-123-123' as phone
) RETURNING *
) SELECT * FROM names_inserted
LEFT JOIN phones_inserted
ON
phones_inserted.id_name=names_inserted.id
在这种情况下,与事务相比,这种技术没有太多优势,但作为一种选择......或者如果您的系统由于某种原因不支持事务......
PS 我知道这是一个 Postgresql 示例,但看起来 MariaDB 完全支持这种查询。在 MySQL 中,我想您可能只使用 LAST_INSERT_ID() 而不是 RETURNING * 和一些小的调整。
于 2021-07-09T08:07:30.810 回答
0
我的方法很简单...一次处理一个查询,程序化编程
完美无缺
//insert data
$insertQuery = "INSERT INTO drivers (fname, sname) VALUES ('$fname','$sname')";
//save using msqli_query
$save = mysqli_query($conn, $insertQuery);
//check if saved successfully
if (isset($save)){
//save second mysqli_query
$insertQuery2 = "INSERT INTO users (username, email, password) VALUES ('$username', '$email','$password')";
$save2 = mysqli_query($conn, $insertQuery2);
//check if second save is successfully
if (isset($save2)){
//save third mysqli_query
$insertQuery3 = "INSERT INTO vehicles (v_reg, v_make, v_capacity) VALUES('$v_reg','$v_make','$v_capacity')";
$save3 = mysqli_query($conn, $insertQuery3);
//redirect if all insert queries are successful.
header("location:login.php");
}
}else{
echo "Oopsy! An Error Occured.";
}
于 2022-03-03T10:27:08.420 回答
-1
mysqli_multi_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();
?>
于 2019-07-10T18:06:34.277 回答