Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Thực hiện nhiều truy vấn SELECT cùng lúc trong MySQL với DELIMITER

Chạy nhiều câu lệnh SELECT trong một khối lệnh MySQL

Sử dụng DELIMITER để thay đổi ký tự kết thúc câu lệnh (mặc định là ;), cho phép thực thi nhiều truy vấn trong một khối (batch), thường dùng trong stored procedure, trigger hoặc script SQL.

1. Tạo bảng 1 (DemoTable1) - Engine MyISAM

mysql> CREATE TABLE DemoTable1 (
    Title TEXT
) ENGINE=MyISAM;
mysql> INSERT INTO DemoTable1 VALUES
    ('The database MySQL is less popular than MongoDB'),
    ('Java language uses MySQL database'),
    ('Node.js uses the MongoDB');

2. Tạo bảng 2 (DemoTable2)

mysql> CREATE TABLE DemoTable2 (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
mysql> INSERT INTO DemoTable2 VALUES (),(),(),(),(),(),(),(),();

3. Thực thi 2 SELECT cùng lúc với DELIMITER

mysql> DELIMITER //
mysql> SELECT * FROM DemoTable1; SELECT * FROM DemoTable2; //
mysql> DELIMITER ;

4. Kết quả: Hai tập kết quả riêng biệt

+-------------------------------------------------+
| Title                                           |
+-------------------------------------------------+
| The database MySQL is less popular than MongoDB |
| Java language uses MySQL database               |
| Node.js uses the MongoDB                        |
+-------------------------------------------------+
3 rows in set (0.00 sec)

+----+
| Id |
+----+
| 1  |
| 2  |
| 3  |
| 4  |
| 5  |
| 6  |
| 7  |
| 8  |
| 9  |
+----+
9 rows in set (0.03 sec)

Giải thích:

  • DELIMITER //: Đổi dấu kết thúc từ ; sang //
  • Các câu lệnh phân cách bằng ; bên trong khối
  • // kết thúc khối, thực thi tất cả
  • DELIMITER ;: Khôi phục mặc định

Lưu ý:

  • Chỉ hoạt động trong client dòng lệnh (mysql client) hoặc script .sql
  • Không dùng được trong ứng dụng (PHP, Java, Python...) - mỗi driver xử lý 1 câu lệnh
  • Trong ứng dụng, chạy từng SELECT riêng biệt hoặc dùng multi-query (mysqli::multi_query)

Cách hiện đại hơn (MySQL 8.0+): Sử dụng CTE hoặc stored procedure thay vì DELIMITER cho logic phức tạp.