Thủ Tục Trong Sql Là Gì

     

Trong bài viết lần này họ sẽ cùng nhau khám phá hàm, giấy tờ thủ tục và trigger trong SQL vps là cái gì và được sử dụng ra làm sao và thuộc xem test chúng bao gồm đáng sợ, nguy nan và cao cả như đầy đủ gì mọi fan thường nghĩ hay là không

*

(Những lấy ví dụ trong nội dung bài viết dựa trên cơ sở dữ liệu sakila - https://dev.mysql.com/doc/sakila/en/sakila-installation.html)

Stored procedure (Thủ tục)

Stored procedure là loại gì?

Là đoạn công tác kịch bản (programming scripts) với các câu lệnh SQL nhúng (embedded SQL) được lưu bên dưới dạng đã có được biên dịch cùng thi hành thực tiếp vì chưng MySQL server,

SP chất nhận được lưu trữ những logic áp dụng trên CSDL. Khi điện thoại tư vấn SP lần đầu tiên tiên, MySQL sẽ tạo nên một lịch tiến hành và tàng trữ nó trong bộ nhớ đệm. Ở hầu như lần gọi hàm tiếp theo, MySQL sử dụng sử dựng lại lịch xúc tiến được lưu lại rất cấp tốc với hiệu xuất xứng đáng tin cậy.

Bạn đang xem: Thủ tục trong sql là gì

SP là một trong những mã SQL đã sẵn sàng sẵn mà bạn cũng có thể lưu, vì thế đoạn mã có thể được thực hiện lại nhiều lần.

Vì vậy, nếu như bạn có một truy tìm vấn SQL mà chúng ta viết đi viết lại những lần, hãy lưu lại nó bên dưới dạng một thủ tục được giữ trữ, sau đó chỉ cần gọi nó để thực thi nó.

Cũng hoàn toàn có thể chuyển các tham số đến một giấy tờ thủ tục được lưu giữ trữ, để thủ tục được tàng trữ có thể chuyển động dựa trên (các) giá trị tham số được truyền vào.

Vì sao nên dùng Stored procedure

Giảm dư vượt mã chương trình: các đoạn mã tương tự như trong những ứng dụng như thêm, update có thể lưu giữ ở phía CSDL

Cải thiện vận tốc thực thi câu lệnh SSQL

Bảo trì: Nếu có sự đổi khác trong CSDL, mã lệnh cần biến đổi có thể khẳng định trong các SP

An ninh CSDL tốt hơn: trong những ứng dụng an toàn cao, cùng với SP có thể kiểm soát truy vấn dữ liệu và đưa ra các qui định an ninh tập trung.

Nhược điểm của Stored procedure

Thiếu tính khả chuyển (Lack of Portability)SP cực nhọc chuyển xuất phát điểm từ 1 DBMS qua 1 DBMS khác. Yêu cầu lập trình cùng kiểm test lại đáng kểSQLServer: T-SQLOracle: PL-SQLTải DB ServerSử dụng SP nhiều rất có thể gây quá cài đặt MySQL hệ thống (SQL Server bắt buộc lưu trữ rất nhiều kế hoạc thực thi)Hạn chế ngữ điệu lập trìnhLập trình SP không đa dạng chủng loại như các nền tảng trở nên tân tiến khác như Java giỏi PHPLưu ý: những phiên phiên bản tương lai của MySQL rất có thể cung cấp những giao diện chất nhận được tạo những SP sử dụng những ngôn ngữ bên ngoài, ví dụ Java

Sử dụng Stored Procedure khi?

Thực hiện mọi phép toán phức tạp, lặp lại nhiều lầnProject đòi hỏi nghiêm ngặt về vận tốc thực thi . Stored Procedure cho vận tốc thực thi nhanh hơn so với các câu lệnh SQL Server thường thì vì Stored Procedure đã có được lưu sẵn tại SQL server, do vậy nó chỉ cần gọi một chiếc lệnh để xúc tiến Stored Procedure, vấn đề đó giúp tăng tốc độ thực thi.Trong quy trình tạo Stored Procedure, SQL hệ thống đã buổi tối ưu hóa số đông dòng lệnh này, vấn đề này giúp cho tốc độ thực thi cao hơn câu lệnh SQL thông thường rất nhiều.

Xem thêm: Giải Đáp Nhanh Có Nên Bật Chế Độ Nguồn Điện Thấp Của Iphone !

Không cần sử dụng Stored Procedure khi?

Store Procedured làm quá trình debug trở nên trở ngại hơn.

Vì vậy hãy nghĩ cho Stored Procedure như là phương án sau cùng để buổi tối ưu hóa tốc độ thực thi chương trình.Các project gồm size nhỏ và vừa bắt buộc ưu tiên sử dụng những thư viện ORM (Object Relation Mapping), như Entity Framework mang đến C#, TypeORM mang đến NodeJs.

Sự khác nhau của Thủ tục, Hàm

Thủ tục (PROCEDURE)Hàm (FUNCTION)
Cách gọiCALLSử dụng các câu lệnh vào sql như SELECT, UPDATE
Giá trị trả vềCó thể một hoặc nhiều hiệu quả SELECT và các tham số outTrả về một giá trị duy nhất trải qua RETURN
Các tham sốGiá trị (input) và tham chiếu (output) những tham số (IN, OUT, INOUT)Chỉ các giá trị thông số vào (input). Ko cần những thẻ như IN..
Gọi thủ tục/hàmCó thể gọi những thủ tục và hàm khácChỉ hoàn toàn có thể gọi những hàm khác

Cú pháp chế tạo Thủ tục/Hàm

CREATE FUNCTION name () RETURNS datatype sqlcode

CREATE PROCEDURE name () sqlcode

Ví dụ

Tạo một thủ tục tên uspActorList trả về list first_name, last_name của những actor bố trí theo first_name

CREATE PROCEDURE uspActorListASBEGIN SELECT first_name, last_price FROM actor ORDER BY first_name;END;Tạo một giấy tờ thủ tục tên uspActorList có tham số nguồn vào là max_id trả về danh sách first_name, last_name của các actor bố trí theo first_name và tất cả id CREATE PROCEDURE actorList(IN max_id INT)ASBEGIN SELECT first_name, last_price FROM actor WHERE actor_id tạo nên một function tên film_in_stock trả về con số với đầu vào (IN) là p_film_id, p_store_id, đầu ra (OUT) là p_film_count

CREATE PROCEDURE film_in_stock(IN p_film_id INT, IN p_store_id INT, OUT p_film_count INT)READS SQL DATABEGIN SELECT inventory_id FROM inventory WHERE film_id = p_film_id and store_id = p_store_id và inventory_in_stock(inventory_id); SELECT FOUND_ROWS() INTO p_film_count;END $$

Các câu lệnh khác

DELIMITER $$Thường được áp dụng khi xác minh các hàm, thủ tục và trình kích hoạt (trong đó bạn phải thực hiện nhiều câu lệnh). Lốt $$ được thực hiện để xác minh phần đầu của cục bộ thủ tục, phía bên trong các câu lệnh trơ thổ địa được hoàn thành bởi ;. Bằng cách đó, lúc mã được chạy trong sản phẩm khách mysql, sản phẩm khách có thể cho biết nơi tổng thể thủ tục hoàn thành và thực thi nó như một đơn vị chức năng thay vì chưng thực thi các câu lệnh riêng rẽ lẻ bên trong.

Xem thêm: Messenger Bị Khoá Không Gửi Được Tin Nhắn, Messenger Không Gửi Được Tin Nhắn

Lưu ý rằng từ bỏ khóa DELIMITER chỉ với một tính năng của command line mysql client (và một vài máy khách khác) và không phải là một cấu trúc của SQL thông thường. Nó vẫn không chuyển động nếu chuyển nó qua một API ngôn từ lập trình mang đến MySQL. Một số ứng dụng khách khác ví như PHPMyAdmin có những phương thức không giống để hướng dẫn và chỉ định dấu phân làn không mang định.