Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Lặp lại n lần mà không cần sử dụng một thủ tục được lưu trữ

Tài liệu MySQL về Tuyên bố kiểm soát luồng nói:

Tài liệu trên Chương trình và Chế độ xem được Lưu trữ nói:

Cú pháp câu lệnh kết hợp

Vì vậy, có vẻ như bạn chỉ có thể chạy một vòng lặp rõ ràng trong một thủ tục, hàm hoặc trình kích hoạt được lưu trữ.

Tùy thuộc vào những gì bạn làm trong câu lệnh SQL của mình, có thể được chấp nhận sử dụng một bảng (hoặc chế độ xem) các số ( Tạo" Bảng Numbers "trong mysql , MYSQL:Bảng số tuần tự ).

Nếu truy vấn của bạn là SELECT và có thể trả về kết quả của SELECT của bạn 10 lần với một tập kết quả dài (thay vì 10 tập kết quả riêng biệt), bạn có thể làm như sau:

SELECT MainQuery.*
FROM
    (
        SELECT 1 AS Number 
        UNION ALL SELECT 2
        UNION ALL SELECT 3
        UNION ALL SELECT 4
        UNION ALL SELECT 5
        UNION ALL SELECT 6
        UNION ALL SELECT 7
        UNION ALL SELECT 8
        UNION ALL SELECT 9
        UNION ALL SELECT 10
    ) AS Numbers
    CROSS JOIN
    (
        SELECT 'some data' AS Result
    ) AS MainQuery

Ví dụ cho INSERT

Tôi khuyên bạn nên có một bảng số vĩnh viễn trong cơ sở dữ liệu của bạn. Nó hữu ích trong nhiều trường hợp. Xem các liên kết ở trên cách tạo nó.

Vì vậy, nếu bạn có một bảng Numbers với int cột Number với các giá trị từ 1 đến, giả sử, 100K (như tôi làm) và khóa chính trên cột này, sau đó thay vì vòng lặp này:

DECLARE count INT DEFAULT 0;
WHILE count < 10 DO
    INSERT INTO table_name(col1,col2,col3) 
    VALUES("val1","val2",count);

    SET count = count + 1;
END WHILE;

bạn có thể viết:

INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;

Nó cũng sẽ hoạt động nhanh hơn gần 10 lần.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tìm kiếm tên đầy đủ hoặc họ hoặc tên trong cơ sở dữ liệu MySQL với họ và tên trong các cột riêng biệt

  2. MySQL hoạt động với 127.0.0.1 nhưng không hoạt động với localhost?

  3. Quyền truy cập bị từ chối đối với người dùng 'root' @ 'localhost' trong khi cố gắng cấp đặc quyền. Làm cách nào để cấp đặc quyền?

  4. Chuyển đổi giản đồ MySQL sang Github Wiki?

  5. Chèn câu lệnh kiểm tra bản sao trước khi chèn