Gọi thủ tục php mysql

[Thực hành] Thủ tục cửa hàng

tổng quan

Bùi Cường Bùi Cường

15-06-2020

NỘI DUNG BÀI VIẾT

  • 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

Chủ Đề