Làm cách nào để chạy nhiều truy vấn sql trong mysql?

MySQL tùy chọn cho phép có nhiều câu lệnh trong một chuỗi câu lệnh, nhưng nó yêu cầu xử lý đặc biệt

Nhiều câu lệnh hoặc nhiều truy vấn phải được thực thi với mysqli. multi_query[]. Các câu lệnh riêng lẻ của chuỗi câu lệnh được phân tách bằng dấu chấm phẩy. Sau đó, tất cả các tập kết quả được trả về bởi các câu lệnh đã thực hiện phải được tìm nạp

Máy chủ MySQL cho phép có các câu lệnh trả về tập kết quả và câu lệnh không trả về tập kết quả trong một câu lệnh nhiều lần

Ví dụ #1 Nhiều câu lệnh

mysqli_report[MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT];
$mysqli = new mysqli["example.com", "user", "password", "database"];

$mysqli->query["DROP TABLE IF EXISTS test"];
$mysqli->query["CREATE TABLE test[id INT]"];

$sql = "SELECT COUNT[*] AS _num FROM test;
        INSERT INTO test[id] VALUES [1];
        SELECT COUNT[*] AS _num FROM test; ";

$mysqli->multi_query[$sql];

do {
    if [$result = $mysqli->store_result[]] {
        var_dump[$result->fetch_all[MYSQLI_ASSOC]];
        $result->free[];
    }
} while [$mysqli->next_result[]];

Ví dụ trên sẽ xuất ra

array[1] {
  [0]=>
  array[1] {
    ["_num"]=>
    string[1] "0"
  }
}
array[1] {
  [0]=>
  array[1] {
    ["_num"]=>
    string[1] "1"
  }
}

Cân nhắc về Bảo mật

Hàm API mysqli. truy vấn[] và mysqli. real_query[] không đặt cờ kết nối cần thiết để kích hoạt nhiều truy vấn trong máy chủ. Một lệnh gọi API bổ sung được sử dụng cho nhiều câu lệnh để giảm thiệt hại do các cuộc tấn công SQL injection vô tình. Kẻ tấn công có thể cố gắng thêm các câu lệnh như ; DROP DATABASE mysql hoặc ; SELECT SLEEP[999]. Nếu kẻ tấn công thành công trong việc thêm SQL vào chuỗi câu lệnh nhưng mysqli::multi_query không được sử dụng, thì máy chủ sẽ không thực thi câu lệnh SQL độc hại và được đưa vào

Bạn có thể bao gồm nhiều câu lệnh SQL trên bảng truy vấn SQL. Các ngoại lệ là câu lệnh CALL và CREATE PROCEDURE. Những câu lệnh này phải được sử dụng một mình trong một truy vấn

Về nhiệm vụ này

Nếu lời nhắc xác nhận được bật, lời nhắc xác nhận sẽ hiển thị sau mỗi câu lệnh CAM KẾT và sau câu lệnh cuối cùng trong truy vấn. Tuy nhiên, một số câu lệnh SQL, chẳng hạn như SET, áp dụng cho phiên hoặc môi trường QMF và không hiển thị lời nhắc xác nhận. Nếu truy vấn không chứa câu lệnh COMMIT, một lời nhắc xác nhận duy nhất sẽ được hiển thị. Phản hồi của bạn đối với lời nhắc áp dụng cho tất cả các thay đổi do truy vấn thực hiện

Nếu một truy vấn chứa nhiều câu lệnh chèn, cập nhật hoặc xóa các hàng trong đối tượng cơ sở dữ liệu, phản hồi của bạn đối với lời nhắc xác nhận sẽ áp dụng cho tất cả các bản cập nhật cơ sở dữ liệu. Thông tin trong lời nhắc xác nhận chứa tổng số hàng được cập nhật bởi tất cả các câu lệnh trong truy vấn. Nếu truy vấn không chứa câu lệnh chèn, cập nhật hoặc xóa hàng và không xóa đối tượng khỏi cơ sở dữ liệu, lời nhắc xác nhận sẽ không hiển thị. Nếu truy vấn không chứa các câu lệnh chèn, cập nhật hoặc xóa hàng nhưng xóa đối tượng khỏi cơ sở dữ liệu, lời nhắc xác nhận DROP sẽ hiển thị. Phản hồi của bạn đối với lời nhắc trong trường hợp này áp dụng cho cả câu lệnh DROP và các câu lệnh khác trong truy vấn

Mọi giá trị biến mà bạn cung cấp cho truy vấn sẽ áp dụng cho tất cả các câu lệnh SQL trong truy vấn bao gồm một biến có tên đó. Ví dụ: nếu bạn cung cấp giá trị "Q. NHÂN VIÊN" cho biến &TABLE trong truy vấn sau, cả câu lệnh UPDATE và INSERT đều thay đổi Q. bàn NHÂN VIÊN.

UPDATE &TABLE                                       
SET ID=53                                                
WHERE NAME='HANES';                                      
INSERT INTO &TABLE                                  
VALUES [42, 'GRIMLEY', 15, 'SALES', 10, 19264.50, 656.34]

Nếu truy vấn chứa nhiều câu lệnh và một trong các câu lệnh không thành công, quá trình xử lý sẽ dừng và không có câu lệnh tiếp theo nào được chạy. Nếu các câu lệnh trước câu lệnh bị lỗi đã thay đổi cơ sở dữ liệu, thì những thay đổi này sẽ được khôi phục [không áp dụng cho cơ sở dữ liệu] trừ khi truy vấn chứa câu lệnh CAM KẾT. Nếu truy vấn chứa một hoặc nhiều câu lệnh COMMIT, thì tất cả các thay đổi cơ sở dữ liệu xảy ra trước lỗi SQL và sau câu lệnh COMMIT thành công cuối cùng sẽ được khôi phục. Một số câu lệnh, chẳng hạn như SET, áp dụng cho phiên hoặc môi trường QMF™ và do đó không được khôi phục trong các tình huống lỗi. Biến toàn cục DSQEC_RUN_MQ kiểm soát xem có cho phép các truy vấn có nhiều câu lệnh SQL hay không. Để chạy truy vấn có nhiều câu lệnh, hãy đảm bảo rằng mỗi câu lệnh được phân tách bằng dấu chấm phẩy; . Khi biến được đặt thành 0, tất cả các câu lệnh sau dấu chấm phẩy đầu tiên sẽ bị bỏ qua

Độ dài tối đa cho phép của một truy vấn SQL có thể chạy bằng lệnh RUN QUERY được xác định bởi cơ sở dữ liệu mà bạn được kết nối khi bạn đưa ra lệnh

  • Trong DB2® dành cho z/OS® , các truy vấn SQL có thể dài tới 2 MB khi biến toàn cục DSQEC_SQLQRYSZ_2M được đặt thành 1. Khi biến được đặt thành 0, tất cả các câu lệnh sau câu lệnh đầu tiên trong truy vấn sẽ bị bỏ qua khi bạn đưa ra lệnh RUN QUERY.

    Tôi có thể chạy nhiều truy vấn trong MySQL không?

    MySQL cũng hỗ trợ thực thi một chuỗi chứa nhiều câu lệnh được phân tách bằng ký tự dấu chấm phẩy [ ; ] . Khả năng này được kích hoạt bởi các tùy chọn đặc biệt được chỉ định khi bạn kết nối với máy chủ bằng mysql_real_connect[] hoặc sau khi kết nối bằng cách gọi mysql_set_server_option[].

    Làm cách nào để chạy hai truy vấn SQL cùng nhau trong MySQL?

    Toán tử MySQL UNION . Đầu tiên, số lượng và thứ tự của các cột xuất hiện trong tất cả các câu lệnh CHỌN phải giống nhau. Thứ hai, kiểu dữ liệu của các cột phải giống nhau hoặc tương thích.

    Làm cách nào tôi có thể thêm hai truy vấn trong MySQL?

    Toán tử UNION của MySQL được sử dụng để kết hợp các tập kết quả của 2 hoặc nhiều câu lệnh SELECT . Nó loại bỏ các hàng trùng lặp giữa các câu lệnh SELECT khác nhau. Mỗi câu lệnh SELECT trong toán tử UNION phải có cùng số trường trong tập kết quả có kiểu dữ liệu tương tự.

    Làm cách nào để chạy nhiều câu lệnh CHỌN một truy vấn trong MySQL?

    Để kết hợp hai hoặc nhiều câu lệnh SELECT để tạo thành một bảng kết quả duy nhất, hãy sử dụng các toán tử tập hợp. UNION, EXCEPT hoặc INTERSECT. .
    UNION hoặc UNION DISTINCT
    NGOẠI TRỪ hoặc NGOẠI TRỪ DISTINCT
    GIAO DIỆN hoặc GIAO DIỆN DISTINCT

Chủ Đề