Chúng ta có thể sử dụng con trỏ trong MySQL không?

Con trỏ là một câu lệnh CHỌN được xác định trong phần khai báo của chương trình được lưu trữ của bạn trong MySQL

cú pháp

Cú pháp khai báo con trỏ trong MySQL là

DECLARE cursor_name CURSOR FOR
  select_statement;

Tham số hoặc Đối số

cursor_nameTên để gán cho con trỏ. select_statementCâu lệnh SELECT kết hợp với con trỏ

Thí dụ

Hãy xem cách khai báo một con trỏ trong MySQL

Ví dụ

DECLARE c1 CURSOR FOR
  SELECT site_id
  FROM sites
  WHERE site_name = name_in;

Tập hợp kết quả của con trỏ này là tất cả các giá trị site_id trong đó site_name khớp với biến name_in

Trong hầu hết các trường hợp, khi thực hiện các truy vấn SQL bằng MySQL shell hoặc MySQL workbench, chúng tôi không lưu kết quả, mặc dù chúng tôi có chức năng lưu kết quả do máy chủ xử lý bằng thủ tục được lưu trữ

Trong hướng dẫn này, tôi sẽ không thảo luận về các thủ tục, chức năng hoặc trình kích hoạt được lưu trữ. Thay vào đó, tôi sẽ chỉ đi sâu vào việc chỉ cho bạn cách bạn có thể sử dụng các con trỏ MySQL để chạy các kết quả trong các thủ tục được lưu trữ

Trước khi bắt đầu tạo và sử dụng con trỏ với các ví dụ, chúng ta hãy dành một chút thời gian để thảo luận về một số điểm chính về con trỏ mà bạn nên biết

Các tính năng của một con trỏ MySQL

  1. Con trỏ ở chế độ chỉ đọc và không thể cập nhật hoặc xóa dữ liệu trong tập kết quả khỏi quy trình
  2. Một con trỏ cần được khai báo trước khi nó có thể được sử dụng. Định nghĩa con trỏ chỉ là một bước để nói với MySQL rằng một con trỏ như vậy tồn tại và không truy xuất và dữ liệu
  3. Bạn chỉ có thể truy xuất dữ liệu theo thứ tự được chỉ định bởi câu lệnh chọn và không theo bất kỳ thứ tự đảo ngược nào, thường được gọi là không thể cuộn
  4. Bạn sử dụng một con trỏ bằng cách mở nó và sau đó thực hiện các thao tác tìm nạp trên dữ liệu được lưu trữ
  5. Bạn phải đóng con trỏ sau khi thao tác tìm nạp hoàn tất

Bây giờ chúng ta đã biết ý nghĩa của con trỏ, chúng ta có thể bắt đầu minh họa cách nó hoạt động bằng các ví dụ thực tế

Sử dụng cơ bản

Cú pháp chung để khai báo con trỏ trong MySQL rất đơn giản. Chúng tôi bắt đầu bằng cách sử dụng từ khóa KHAI THÁC như được hiển thị trong truy vấn mẫu bên dưới

Cách khai báo con trỏ

KHAI BÁO tên_con trỏ CON TRỎ CHO SELECT_expression;

Tên_con_trỏ là tên đặt cho con trỏ khi khai báo. Lưu ý rằng việc khai báo con trỏ phải sau bất kỳ biến nào được khai báo để ngăn MySQL dẫn đến lỗi

Tiếp theo là biểu thức SELECT, lưu câu lệnh SELECT liên kết với con trỏ

Làm thế nào để mở một con trỏ

Khi chúng tôi đã khai báo một con trỏ và MySQL biết rằng con trỏ tồn tại, chúng tôi có thể bắt đầu sử dụng nó, yêu cầu phải mở con trỏ

Cú pháp chung để mở một con trỏ như trong truy vấn bên dưới

MỞ tên_con_trỏ;

Lệnh này mở các con trỏ được tham chiếu theo tên của nó và người ta có thể bắt đầu sử dụng nó

Cách lấy dữ liệu

Mở con trỏ cho phép bạn tìm nạp thông tin được lưu trữ trong thủ tục, chức năng hoặc trình kích hoạt

Cú pháp chung để tìm nạp dữ liệu bằng con trỏ như được hiển thị

FETCH cursor_name VÀO các biến;

GHI CHÚ. Như đã đề cập, đảm bảo rằng con trỏ được sử dụng sau khi các biến được khai báo để tránh lỗi

Cách đóng và nhả con trỏ

Sau khi hoàn thành các thao tác yêu cầu con trỏ đã xác định, tốt nhất là đóng con trỏ để giải phóng bộ nhớ được liên kết với nó

Sau khi đóng con trỏ, người dùng cần mở lại con trỏ bằng từ khóa OPEN (hình trên) trước khi sử dụng con trỏ

Bạn không cần khai báo con trỏ sau câu lệnh close

Cú pháp chung để đóng con trỏ như trong truy vấn bên dưới

ĐÓNG tên_con_trỏ;

Xử lý lỗi

Con trỏ MySQL hoạt động bằng cách đọc đệ quy hàng tiếp theo trong tập kết quả. Nếu không có hàng tiếp theo, con trỏ sẽ đóng và không trả về dữ liệu trừ khi được chỉ định. Đây có thể là một vấn đề, đặc biệt là sau khi con trỏ đi đến cuối kết quả

Là một giải pháp, một trình xử lý KHÔNG TÌM KIẾM được xác định. Điều này chỉ định hành động sẽ được thực hiện nếu không tìm thấy hàng tiếp theo

Cú pháp chung để xử lý lỗi khi sử dụng con trỏ là

KHAI BÁO TIẾP TỤC XỬ LÝ KHÔNG TÌM KIẾM SET chấm dứt = true;

Giá trị kết thúc là một biến được sử dụng để xác định rằng con trỏ đã đi đến cuối kết quả. Tên biến có thể là bất kỳ tên nào miễn là phù hợp với quy ước đặt tên biến của MySQL

GHI CHÚ. Giống như tất cả các biến được sử dụng trong con trỏ, nó phải được xác định trước khi được sử dụng trong con trỏ

Trường hợp sử dụng ví dụ

Hãy để chúng tôi tạo một con trỏ thu thập email của khách hàng có sẵn trong bảng khách hàng của cơ sở dữ liệu mẫu Sakila

Tài nguyên để tải xuống và cài đặt cơ sở dữ liệu Sakila bên dưới

https. // nhà phát triển. mysql. com/doc/sakila/en/

Phần sau đây minh họa quy trình sử dụng con trỏ để tìm nạp email

SỬ DỤNG sakila;
DELIMITER $$
CREATE PROCEDURE createNewsletter(
    INOUT email VARCHAR(4000) 100 AND address_id < 200);
)
BEGIN
    DECLARE terminate INT DEFAULT FALSE;
    DECLARE emailAddr VARCHAR(255) DEFAULT "";
    DECLARE collect_email CURSOR FOR SELECT email FROM sakila.customer WHERE (address_id > 100 AND address_id < 200);
    KHAI BÁO TIẾP TỤC XỬ LÝ CHO NOT FOUND SET chấm dứt = TRUE;
    MỞ Collect_email;
    getEmails: LOOP
      T FETCH coll_email VÀO emailAddr;
      NẾU chấm dứt = TRUE THÌ
            RỜI getEmail;
. ", email);
        SET emails = CONCAT(emailAddr, "|", emails);
    END LOOP getEmails;
    CLOSE collect_email;
END$$
DELIMITER ;
SET @emails = "";
CALL createNewsLetter(@collect_email);
SELECT @collect_email;

Khi truy vấn thực thi, bạn sẽ nhận được kết quả như hình bên dưới

Chúng ta có thể sử dụng con trỏ trong MySQL không?

Sự kết luận

Trong hướng dẫn này, chúng tôi đã hướng dẫn sử dụng con trỏ MySQL để phân tích cú pháp dữ liệu được lưu trữ trong tập kết quả. Xem xét tài liệu để nắm vững cách thực hiện các con trỏ

Làm cách nào để sử dụng con trỏ trong MySQL?

Sau đây là các bước tạo con trỏ. .
Khai báo con trỏ. Con trỏ là một câu lệnh chọn, được định nghĩa trong phần khai báo trong MySQL
mở con trỏ. Sau khi khai báo con trỏ, bước tiếp theo là mở con trỏ bằng câu lệnh open
Tìm nạp con trỏ. .
Đóng con trỏ

Chúng ta có thể sử dụng con trỏ trong chức năng MySQL không?

Trong MySQL bạn có thể sử dụng con trỏ trong chương trình được lưu trữ như thủ tục, hàm, v.v. . CHỈ ĐỌC - Sử dụng các con trỏ này, bạn không thể cập nhật bất kỳ bảng nào. Không thể cuộn - Sử dụng các con trỏ này, bạn có thể truy xuất các bản ghi từ một bảng theo một hướng i. e. , từ đầu đến cuối.

Tại sao con trỏ không được khuyến nghị trong SQL?

Con trỏ có thể được sử dụng trong một số ứng dụng cho hoạt động nối tiếp như trong ví dụ trên, nhưng nhìn chung nên tránh sử dụng chúng vì chúng mang lại tác động tiêu cực đến hiệu suất, đặc biệt là khi hoạt động trên một . .

Làm cách nào để sử dụng con trỏ trong thủ tục lưu trữ MySQL?

Làm việc với con trỏ MySQL . Nếu bạn khai báo con trỏ trước khi khai báo biến, MySQL sẽ báo lỗi. Con trỏ phải luôn kết hợp với câu lệnh SELECT. Tiếp theo, mở con trỏ bằng cách sử dụng câu lệnh OPEN. The cursor declaration must be after any variable declaration. If you declare a cursor before the variable declarations, MySQL will issue an error. A cursor must always associate with a SELECT statement. Next, open the cursor by using the OPEN statement.