tổng quan Bùi Cường Bùi Cường 15-06-2020 NỘI DUNG BÀI VIẾT[Thực hành] Thủ tục cửa hàng
- Mục tiêu
- description
- Hướng dẫn
- Ưu điểm của Stored Proccedure trong Mysql
- Những nhược điểm của Stored Procedure
Mục tiêu
Luyện tập sử dụng thủ tục lưu trữ trong MySql
description
Thực hiện hành động tạo thủ tục lưu trữ trên cơ sở dữ liệu classicmodels
Chúng ta có bảng khách hàng như sau
Hướng dẫn
Thủ tục lưu trữ được định nghĩa là một tập tin khai báo sql được lưu trữ ngay trong cơ sở dữ liệu [cơ sở dữ liệu] và sau đó, được gọi bởi một chương trình, một trình kích hoạt hoặc thậm chí là một thủ tục được lưu trữ khác
Stored Procedure cho phép truyền tham số
Ưu điểm của Stored Proccedure trong Mysql
Stored procedure làm tăng khả năng thực thi của ứng dụng
Sau khi được tạo, thủ tục lưu trữ sẽ được biên dịch [biên dịch] và lưu trữ ngay trong cơ sở dữ liệu. Lẽ dĩ nhiên, nó sẽ chạy nhanh hơn là một lệnh sql chưa biên dịch được gửi trực tiếp từ ứng dụng
Thủ tục lưu trữ làm giảm lưu lượng thông tin giao tiếp giữa ứng dụng và máy chủ cơ sở dữ liệu, thay vì gửi những câu lệnh sql chưa tuân thủ dài , ứng dụng chỉ việc gửi tên của thủ tục lưu trữ và lấy lại kết quả
Những nhược điểm của Stored Procedure
Nếu bạn tạo ra quá nhiều thủ tục thì quản trị viên sẽ sử dụng bộ nhớ để lưu trữ các thủ tục này khá nhiều
Ngoài ra nếu bạn thực hiện quá nhiều lý do trong mỗi thủ tục xử lý thì đồng nghĩa với việc CPU sẽ làm việc nặng hơn
Thủ tục được lưu trữ chỉ bao gồm các biến tuyên bố sql, vì vậy rất khó có thể viết 1 thủ tục Để thực hiện các thao tác xử lý phức tạp như các ngôn ngữ khác nhau được ứng dụng phổ biến như php,c#…
Một số hệ thống quản trị CSDL có những công cụ hỗ trợ Debug Store nhưng MYSQL thì không có
Tạo thủ tục lưu trữ Mysql đầu tiên
PHÂN PHỐI //
TẠO THỦ TỤC findAllCustomers[]
BẮT ĐẦU
CHỌN * TỪ khách hàng;
CHẤM DỨT //
PHÂN BIỆT ;
Giải thích
- DELIMITER // dùng để phân cách bộ nhớ lưu trữ thủ tục Cache và mở ra một ô lưu trữ mới
- CREATE PROCEDURE findAllCustomers[] dùng để khai báo tạo một thủ tục mới, trong đó findAllCustomers chính là tên thủ tục còn hai từ đầu là từ khóa
- ** BẮT ĐẦU và KẾT THÚC;
- **GIỮ GIỚI HẠN ;
Sau đó chạy câu SQL này và nó báo thành công tức là bạn đã tạo một thủ tục mới với tên findAllCustomers
Ở bài trước chúng ta đã tìm hiểu khái niệm Mysql Stored Procedure là gì rồi thì trong bài này chúng ta sẽ tiếp tục học chủ đề này. Chúng ta sẽ học cách viết một Stored Procedure mới trong hệ thống quản trị CSDL MYSQL
Bài viết này đã được đăng tại freetuts. net , không được sao chép dưới mọi hình thức.
Trong bài chúng ta sẽ viết một Thủ tục trả về danh sách sản phẩm của bảng Sản phẩm, chính vì vậy trước tiên bạn phải tạo một bảng tên là Sản phẩm đã có nhé
1. Tạo bảng Sản phẩm để viết Thủ tục
Bạn tạo một Cơ sở dữ liệu mới với tên bất kỳ, sau đó dán đoạn mã sau vào chương trình chạy câu hỏi để tạo bảng sản phẩm
Bài viết này đã được đăng tại [free tuts. bọc lưới]
CREATE TABLE IF NOT EXISTS `products` [ `id` INT[11] NOT NULL AUTO_INCREMENT, `title` VARCHAR[255] COLLATE utf8_unicode_ci DEFAULT NULL, `content` TEXT COLLATE utf8_unicode_ci, PRIMARY KEY [`id`] ] ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ; -- -- Contenu de la table `products` -- INSERT INTO `products` [`id`, `title`, `content`] VALUES [1, 'Học lập trình online tại freetuts.net', 'Gioi thieu website Học lập trình online tại freetuts.net'], [2, 'Tutorials học Stored Procedure', 'Website Tutorials học Stored Procedure'];
Câu lệnh này sẽ tạo một bảng mới và thêm vào hai bản ghi để kiểm tra. Bây giờ chúng ta sẽ bắt đầu tìm hiểu cú pháp khai báo và sử dụng Stored Procedure trong MYSQL
2. Tạo thủ tục lưu trữ Mysql đầu tiên
Trong sê-ri này, tôi sử dụng IDE SqlYog để quản lý cơ sở dữ liệu nhé, nếu muốn học thuận tiện thì bạn nên cài đặt và sử dụng phần mềm này luôn
Tạo thủ tục lưu trữ
Chúng ta sẽ viết một Quy trình với tên là
DELIMITER $$ CREATE PROCEDURE procedureName[] BEGIN /*Xu ly*/ END; $$ DELIMITER ;3, nhiệm vụ của thủ tục này là truy vấn lấy danh sách tất cả sản phẩm nằm trong bảng Sản phẩm. Nhưng trước tiên chúng ta tìm hiểu cú pháp khai báo tạo mới một thủ tục như sau
DELIMITER $$ CREATE PROCEDURE procedureName[] BEGIN /*Xu ly*/ END; $$ DELIMITER ;
in which
- Dòng đầu tiên _______ 14 dùng để phân cách bộ nhớ lưu trữ thủ tục Cache và mở ra một ô lưu trữ mới. Đây là cú pháp nên bắt buộc bạn phải nhập như vậy
- Dòng
DELIMITER $$ CREATE PROCEDURE procedureName[] BEGIN /*Xu ly*/ END; $$ DELIMITER ;
0 dùng để khai báo tạo một thủ tục mới, trong đó thủ tụcName chính là tên thủ tục còn hai từ đầu là từ khóa DELIMITER $$ CREATE PROCEDURE procedureName[] BEGIN /*Xu ly*/ END; $$ DELIMITER ;
1vàDELIMITER $$ CREATE PROCEDURE procedureName[] BEGIN /*Xu ly*/ END; $$ DELIMITER ;
2dùng để khai báo bắt đầu thủ tục và kết thúc thủ tục- Cuối cùng là đóng lại ô lưu trữ
DELIMITER $$ CREATE PROCEDURE procedureName[] BEGIN /*Xu ly*/ END; $$ DELIMITER ;
3
Lưu ý là bạn phải tuân thủ theo cú pháp như trên nhé, cấm chỉ việc thay đổi tên của thủ tục là ok
Bây giờ để tạo một thủ tục mới với tên là GetAllProduct thì chúng ta sẽ làm như sau
DELIMITER $$ CREATE PROCEDURE GetAllProducts[] BEGIN /*Xu ly*/ END; $$ DELIMITER ;
Sau đó bạn chạy câu SQL này và nó báo thành công tức là bạn đã tạo một thủ tục mới với tên là GetAllProduct rồi đó. Nếu như bạn sử dụng SqlYog thì bạn vào bảng Sản phẩm và vào mục Stored Procs sẽ thấy một thủ tục vừa được tạo
☛ Thủ tục lưu trữ
Tạo xong rồi bây giờ làm thế nào để gọi đến Cửa hàng này?
CALL storeName[];
Như vậy để gọi tới tên Thủ tục là GetAllProducts thì ta làm như sau
________số 8
Chạy câu truy vấn này và bạn sẽ thấy kết quả như sau, đây chính là hai bản ghi mà ta đã thêm vào phần 1
Xem danh sách Thủ tục lưu trữ trong hệ thống
Nếu bạn không sử dụng SqlYog thì rất khó để quản lý Thủ tục vì không nhìn thấy được nó. Yên tâm vì trong MYSQL có hỗ trợ một số lệnh hiển thị dánh sách Thủ tục lưu sẵn bằng cách chạy lệnh sau .
show procedure status;
Sau khi chạy lên, bạn sẽ nhận được kết quả dạng như sau
Đây chính là Thủ tục mà ta đã tạo ở trên
Edit Stored Procedure đã tạo
Trong Mysql không cung cấp lệnh chỉnh sửa Stored nên thông thường chúng ta sẽ chạy lệnh tạo mới. Tuy nhiên có một lưu ý đó là nếu như bạn đã chạy lệnh tạo Quy trình một lần rồi, sau đó bạn chỉnh sửa và chạy lại thì ngay lập tức sẽ bị báo lỗi ngay vì trùng tên. Để giải quyết vấn đề này, chúng ta sẽ sử dụng lệnh Drop để xóa thủ tục đó và tạo lại.
DELIMITER $$ CREATE PROCEDURE procedureName[] BEGIN /*Xu ly*/ END; $$ DELIMITER ;0
Và một lưu ý nữa là khi bạn sử dụng với quyền Người dùng nào thì Store đó sẽ có quyền thực hiện trong phạm vi của Người dùng đó. Ví dụ bạn không có quyền chỉnh sửa mà bạn tạo thủ tục Chỉnh sửa mới thì khi chạy sẽ bị báo lỗi ngay. Chính vì vậy thông thường khi chỉnh sửa bạn phải thêm người định nghĩa nó như sau
DELIMITER $$ CREATE PROCEDURE procedureName[] BEGIN /*Xu ly*/ END; $$ DELIMITER ;1
Dòng chữ
DELIMITER $$ CREATE PROCEDURE procedureName[] BEGIN /*Xu ly*/ END; $$ DELIMITER ;4 chính là tên người đã tạo ra nó
Lời kết
Bài này đang ở mức căn bản hướng dẫn tạo Procedure trong MYSQL thôi chứ không chuyên sâu gì cả,. Bài tiếp theo chúng ta sẽ học cách khai báo tham số truyền vào cho Thủ tục và cách truyền biến vào khi gọi hàm. Xin mời các bạn đón xem nhse