MySQL Procedure là gì?

Procedure trong MySQL là một tập các khai báo sql được lưu trữ trong cơ sở dữ liệu(database) thực thi khi được gọi bởi một chương trình, một trigger hay một procedure khác.

 

Trước hết chúng ta cùng tìm hiểu về ưu – nhược điểm của procedure để áp dụng cho phù hợp nhé!

Ưu điểm của Procedure trong Mysql

  • ⚡ Procedure làm tăng khả năng thực thi của ứng dụng.
  • ⚡ Sau khi được tạo, procedure sẽ được biên dịch và lưu trữ ngay trong database. Nên nó sẽ thực thi nhanh hơn khi bạn gọi các câu lệnh riêng lẻ từ chương trình.
  • ⚡ Giảm thiểu lưu lượng giao tiếp giữa ứng dụng và database server, thay vì gửi những câu lệnh sql dài và phức tạp, chúng ta sẽ tạo ra các procedure cụ thể, sau đó chỉ cần gọi để thực thi thủ tục.

Procedure có những nhược điểm

  • ☞ Tốn bộ nhớ để lưu trữ.
  • ☞ Nếu bạn thực hiện quá nhiều xử lý trong mỗi procedure thì CPU sẽ làm việc nặng hơn. Các bạn sẽ thấy nhược điểm này với ví dụ bên dưới của mình, khi thực thi việc tạo ra 1000 record.
  • ☞ Procedure chỉ chứa các khai báo sql, đảm nhận thực thi một nhiệm vụ cụ thể. Vì vậy, nó sẽ khó mở rộng, xử lý các thao tác logic khác so với các ngôn ngữ lập trình.
  • ☞ Trong MySQL thì procedure không hỗ trợ việc debug. Vậy nên chúng ta chỉ có thể xoá rồi tạo mới lại procedure khác. Tốn thời gian!

Cách tạo một procedure trong MySQL

Để giải quyết yêu cầu tạo 1000 record dữ liệu, mình tạo một procedure thực thi vấn đề này như sau:

 

-- Tạo 1 thủ tục(procedure) để thực hiện việc tạo ra 1000 student
drop procedure if exists genStudent;

delimiter //
create procedure genStudent (in num int)
begin
	declare i int default 0;
	while i < num do
		insert into students (name, class_id, birthdate) values (
			concat(
				substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ', rand()*28, 4),
				substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ', rand()*28, 4),
				substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ', rand()*28, 4),
				substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ', rand()*28, 4)
			),
			(select id from classes order by rand() limit 1),
			now() - interval floor(rand() * 10) year
		);
		set i = i + 1;
		end while;
end //
delimiter ;

call genStudent (1000);
-- Kết thúc
-- ==================================

 

Như bạn đã biết nhược điểm ở trên, chúng ta cần xoá procedure tồn tại để tạo mới hoặc update. Câu lệnh drop procedure if exists genStudent; sẽ thực hiện việc xoá procedure genStudent nếu nó tồn tại trong database.

delimiter để đánh dấu việc tạo một phân vùng nhớ chứa procedure này. Ký tự // ở phía sau không quan trọng nha các bạn, có thể dùng $$ hoặc ký tự nào đó.

create procedure genStudent chính là cú pháp để khai báo việc tạo mới một thủ tục. Như một function trong ngôn ngữ lập trình, procedure có thểnhận các tham số truyền vào hoặc không cần.

Tất cả các mã SQL sẽ nằm trong đoạn begin - end

Cuối cùng để gọi thủ tục thực thi, chúng ta dùng từ khoá call kèm theo tên thủ tục.

Như vậy là mình đã giới thiệu cơ bản về procedure(thủ tục) trong MySQL và cách tạo một procedure trong MySQL như thế nào. Bạn có thể xem thêm ở tài liệu của MySQL nhé:

https://dev.mysql.com/doc/refman/8.0/en/create-procedure.html

Hi vọng sẽ giúp các bạn áp dụng vào hệ thống phần mềm của mình.

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận

More Post

Dependency Injection và Service Container trong Laravel

Service Container trong Laravel như là trung tâm của một ứng dụng, có mặt mọi nơi trong dự án,...

Khám phá Hội An bằng xe đạp

Ngày nghỉ giỗ tổ Hùng Vương năm nay (21/04/2021) mình đã lên kế hoạch khám phá Hội An bằng xe...

Laravel Swagger là gì? Hướng dẫn tạo Swagger trong Laravel

Swagger là một framework giúp bạn định nghĩa, mô tả các API trong dự án một cách trực quan, rõ...

2
0
Rất thích suy nghĩ của bạn, hãy bình luận.x