Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm thế nào chúng ta có thể sử dụng các câu lệnh đã chuẩn bị sẵn trong MySQL?


Máy chủ MySQL hỗ trợ các câu lệnh chuẩn bị sẵn, rất hữu ích khi chúng ta muốn chạy nhiều truy vấn chỉ khác nhau ở những chi tiết rất nhỏ. Chúng ta có thể chuẩn bị một câu lệnh và sau đó thực thi nó nhiều lần và mỗi lần với các giá trị dữ liệu khác nhau. Về cơ bản, các câu lệnh chuẩn bị sẵn trong MySQL tận dụng lợi thế của giao thức nhị phân máy khách / máy chủ. Các câu lệnh chuẩn bị cung cấp hiệu suất nâng cao vì câu lệnh hoàn chỉnh chỉ được máy chủ phân tích cú pháp.

Tiếp theo là các bước để sử dụng các câu lệnh đã chuẩn bị sẵn trong MySQL -

Chuẩn bị báo cáo

Đây là bước đầu tiên mà chúng ta sẽ chuẩn bị một câu lệnh bằng cách sử dụng câu lệnh PREPARE. Ví dụ:sau đây là một câu lệnh được chuẩn bị bằng cách sử dụng dữ liệu từ bảng "Tender" -

Ví dụ

PREPARE stmt FROM ‘Select tender_value from Tender Where Companyname = ?;’

THỰC HIỆN câu lệnh ĐÃ CHUẨN BỊ

Đây là bước thứ hai trong đó chúng ta sẽ thực thi câu lệnh đã được chuẩn bị bằng cách sử dụng câu lệnh ‘PREPARE’. Ví dụ, chúng ta sẽ thực hiện câu lệnh đã chuẩn bị sẵn stmt với cú pháp sau -

Ví dụ

EXECUTE stmt USING @variable_name;

Ở đây @variable_name sẽ có giá trị mà chúng ta muốn tp chuyển vào tại vị trí? trong câu lệnh PREPARE. Chúng ta cần đặt giá trị của @variable_name bằng cách sử dụng câu lệnh SET trước khi thực hiện câu lệnh đã chuẩn bị.

XỬ LÝ câu lệnh ĐÃ CHUẨN BỊ

Đây là bước cuối cùng mà chúng ta sẽ phát hành câu lệnh đã chuẩn bị với sự trợ giúp của câu lệnh DEALLOCATE. Ví dụ:chúng ta sẽ phân bổ câu lệnh đã chuẩn bị sẵn stmt với sự trợ giúp của cú pháp sau -

Ví dụ

DEALLOCATE PREPARE stmt;

Tiếp theo là các truy vấn với sự trợ giúp của chúng tôi chạy câu lệnh đã chuẩn bị -

mysql> PREPARE stmt FROM 'SELECT tender_value from Tender WHERE
Companyname = ?';
Query OK, 0 rows affected (0.09 sec)
Statement prepared

mysql> SET @A = 'Singla Group.';
Query OK, 0 rows affected (0.00 sec)

mysql> EXECUTE stmt using @A;
+--------------+
| tender_value |
+--------------+
|   220.255997 |
+--------------+
1 row in set (0.07 sec)

mysql> DEALLOCATE PREPARE stmt;
Query OK, 0 rows affected (0.00 sec)