programing

하나의 쿼리에서 여러 테이블에 삽입

itmemos 2023. 9. 4. 19:35
반응형

하나의 쿼리에서 여러 테이블에 삽입

제가 두 개의 테이블을 가지고 있다고 가정하면,names그리고.phones그리고 어떤 입력에서 나온 데이터를 하나의 질의에 표에 삽입하고 싶습니다.어떻게 할 수 있습니까?

그럴수는 없어요.그러나 트랜잭션을 사용하여 두 트랜잭션을 모두 한 트랜잭션에 포함시킬 수 있습니다.

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

MySQL은 단일 INSERT 문에 다중 테이블 삽입을 지원하지 않습니다.제가 아는 유일한 사람은 오라클입니다, 이상하게도...

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

오래된 질문이지만 누군가 유용하다고 생각할 경우에는...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

이 기술은 이 경우의 거래와 비교해 볼 때 큰 이점이 없지만, 선택사항으로...시스템이 어떤 이유로 트랜잭션을 지원하지 않는 경우...

추신. 이것이 Postgresql의 예라는 것은 알지만, MariaDB는 이러한 종류의 쿼리를 완전히 지원하는 것처럼 보입니다.MySQL에서는 RETURN * 및 약간의 조정 대신 LAST_INSERT_ID()를 사용할 수 있습니다.

저도 같은 문제가 있었습니다.저는 for 루프로 해결합니다.

예:

동일한 표 두 에 쓰고 싶다면 루프를 사용합니다.

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 조건을 가진 동적 스크립트 안에 있다면 이것은 좋은 해결책입니다.

제 방법은 간단합니다...한 번에 하나의 쿼리 처리, 절차 프로그래밍

완벽하게 작동합니다.

//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.";
}

함수를 사용하여 여러 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();
?>

언급URL : https://stackoverflow.com/questions/3860280/insert-into-multiple-tables-in-one-query

반응형