Stored Procedure MySQL dùng để làm gì?
Mục tiêuLuyện tập sử dụng store procedure trong MySql Mô tả- Store ProcedureThực hành tạo store procedure trên cơ sở dữ liệu classicmodels. Chúng ta có bảng customers như sau: Hướng dẫnStored Procedure được định nghĩa như một tập các khai báo sql được lưu trữ ngay trong cơ sở dữ liệu (database) và sau đó, được triệu gọi bởi một program, một trigger hay thậm chí là một stored procedure khác. Stored Procedured cho phép truyền tham số. Ưu điểm của Stored Proccedure trong MysqlStored procedure làm tăng khả năng thực thi của ứng dụng. Sau khi được tạo, stored procedure sẽ được biên dịch (compile) và lưu trữ ngay trong database. Lẽ dĩ nhiên, nó sẽ chạy nhanh hơn là một lệnh sql chưa compile được gửi trực tiếp từ ứng dụng. Stored procedure làm giảm lưu lượng thông tin giao tiếp giữa ứng dụng và database server, thay vì gửi những câu lệnh sql chưa complile dài , ứng dụng chỉ việc gửi tên của stored procedure và lấy lại kết quả. Những nhược điểm của Stored ProcudureNếu bạn tạo ra quá nhiều Procedure thì hệ quản trị 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 xử lý trong mỗi thủ tục thì đồng nghĩa với việc CPU sẽ làm việc nặng hơn. S.P chỉ chứa đựng các khai báo sql, vì vậy rất khó có thể viết 1 procedure nhằm thực hiện các thao tác xử lý phức tạp như các ngôn ngữ khác làm được ở tần ứng dụng như php,c#… Một số hệ quản trị CSDL có những tool hỗ trợ Debug Store nhưng MYSQL thì không có. Tạo Mysql Stored Procedure đầu tiên DELIMITER // CREATE PROCEDURE findAllCustomers() BEGIN SELECT * FROM customers; END // DELIMITER ; Giải thích:
Sau đó chạy câu SQL này và nó báo thành công tức là bạn đã tạo mới một thủ tục với tên findAllCustomers. Cách gọi procedure call findAllCustomers(); Sửa procedure Trong Mysql không cung cấp lệnh sửa Stored nên thông thường chúng ta sẽ chạy lệnh tạo mới. Lệnh Drop để xóa đi Procedure đó và tạo lại: DELIMITER // DROP PROCEDURE IF EXISTS `findAllCustomers`// CREATE PROCEDURE findAllCustomers() BEGIN SELECT * FROM customers where customerNumber = 175; END; // DELIMITER Trên đây CodeGym đã cùng với bạn luyện tập sử dụng store procedure trong MySql . Hãy chụp ảnh màn hình và nộp bài thực hành của bạn trên CodeGymX để cùng nhau luyện tập nhé! Mysql Stored Procedure giống như hàm trong PHP, có thể gọi là hàm(Procedure) trong MySQL để thực hiện các dòng lệnh với các thao tác như Insert, update… Đối với hàm thì đương nhiên có tính sử dụng lại(gọi là đệ quy), vấn đề đệ quy này không khuyến khích sử dụng vì MySQL không nên để tính toán quá nhiều. Với Stored Procedure chúng ta có thể sử dụng các hàm xử lý chuỗi, câu lệnh if else, lệnh switch case và những hàm hỗ trợ khác như replace, count, concat… Ưu điểm:
Nhược điểm:
Tạo MYSQL Stored Procedure đầu tiên:Đầu tiên chúng ta cần có dữ liệu để sử dụng, tiến hành tạo một Database với tên bạn chọn và tạo một bảng shops: CREATE TABLE IF NOT EXISTS `shops` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) COLLATE utf8_unicode_ci DEFAULT NULL, `description` TEXT COLLATE utf8_unicode_ci, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1; INSERT INTO `shops` (`id`, `name`, `description`) VALUES ('1', 'shop tiki 1', 'shop tiki 1'); INSERT INTO `shops` (`id`, `name`, `description`) VALUES ('2', 'shop tiki 2', 'shop tiki 2'); INSERT INTO `shops` (`id`, `name`, `description`) VALUES ('3', 'shop tiki 3', 'shop tiki 3'); INSERT INTO `shops` (`id`, `name`, `description`) VALUES ('4', 'shop tiki 4', 'shop tiki 4'); Tạo Stored Procedure: Chúng ta sẽ viết một Procedure với tên là DELIMITER $$ CREATE PROCEDURE procedureName() BEGIN /*Xu ly*/ END; $$ DELIMITER ; Với:
Lưu ý: chúng ta chạy cú pháp này ở đâu? Có thể sử dụng các IDE để thực hiện một cách dễ dàng như: IDE SqlYog, MySQL Workbench…, hoặc cách đơn giản là dùng Phpmyadmin ở đây mình sẽ sử dụng nó. Mở phpmyadmin trên máy bạn sau đó chọn cơ sở dữ liệu đã tạo lúc đầu, tiếp theo vào phần SQL chạy cú pháp trên (nhớ đổi procedureName thành GetShops nha), sau đó nhấn Go Muốn xem mình có tạo thành công chưa, các bạn tiếp tục phần SQL chạy cú pháp sau: show procedure status; lệnh này sẽ liệt kê toàn bộ các procedure đang có trong mysql của các bạn hoặc xem bằng cách thoát phpmyadmin rồi vào lại truy cập như trong ảnh sẽ thấy procedure GetShops() mình vừa tạo ngay: Bây giờ chúng ta sẽ viết câu lệnh Select cho procedure GetShops() này nghĩa là chúng ta phải sửa lại cú pháp tạo ở trên, nhưng trong MySQL không hỗ trợ việc sửa procedure đã có nên chúng ta chỉ có cách xóa đi và tạo mới lại, nếu không xóa mà tạo mới lại nó sẽ báo lỗi vì bị trùng tên. Cú pháp như sau: DELIMITER $$ DROP PROCEDURE IF EXISTS `GetShops`$$ CREATE PROCEDURE `GetShops`() BEGIN SELECT * FROM shops; END$$ DELIMITER ; Cú pháp trên sẽ xóa procedure GetShops() trước sau đó tạo mới lại procedure GetShops() với một câu SQL lấy ra dữ liệu các shop trong bảng shops. Và một lưu ý nữa là khi dùng với quyền User nào thì Store đó sẽ có quyền thực hiện trong phạm vu của User đó. Ví dụ bạn không có quyền edit mà bạn tạo mới một Procedure Edit thì khi chạy sẽ bị báo lỗi ngay. Chính vì vậy thông thường khi edit bạn phải thêm người định nghĩa nó như sau: DELIMITER $$ DROP PROCEDURE IF EXISTS `GetShops`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `GetShops`() BEGIN SELECT * FROM shops; END$$ DELIMITER ; DEFINER=`root`@`localhost` chính là người tạo ra procedure GetShops(): nếu không có dòng này thì sẽ là user mặc định khi đăng nhập vào phpmyadmin. Vậy là chúng ta đã tạo xong một procedure, vậy sử dụng nó như thế nào? Đơn giản để gọi tới Store nào thì ta chỉ cần dùng cú pháp như sau: CALL storeName(); CALL GetShops(); Trong code PHP thay vì chúng ta viết lệnh Select thì chỉ cần gọi câu lệnh trên là được, kết quả chạy phpmyadmin như sau: Bài này kết thúc tại đây, bài tiếp theo chúng ta sẽ học cách khai báo tham số truyền vào cho Procedure và cách truyền biến vào khi gọi hàm. [thongbao]
[/thongbao] |