Thứ Tư, 26 tháng 7, 2023

Tạo MySQL Stored Procedure đầu tiên

Ở 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ệ quản trị CSDL MYSQL.

Trong bài chúng ta sẽ viết một Procedure trả về danh sách sản phẩm của bảng Products, chính vị vậy trước tiên bạn phải tạo một bảng tên là Products đã nhé.

Mục lục

  • 1. Tạo bảng Products để viết Procedure
  • 2. Tạo Mysql Stored Procedure đầu tiên
    • Tạo Stored Procedure
    • Gọi Stored Procedure
    • Xem danh sách Stored Procedure trong hệ thống
    • Sửa Stored Procedure đã tạo
  • Lời kết:

1. Tạo bảng Products để viết Procedure

Bạn tạo một Database mới với tên bất kì, sau đó dán đoạn code sau vào trình chạy câu truy vấn để tạo bảng products.

Bài viết này được đăng tại tranvanbinh.vn

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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ới một bảng và thêm vào hai record để ta test. 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 Mysql Stored Procedure đầu tiên

Trong serie này tôi sử dụng IDE SqlYog để quản lý CSDL nhé, nên nếu muốn học thuận tiện thì bạn nên cài đặt và dụng phần mềm này luôn.

Tạo Stored Procedure

Chúng ta sẽ viết một Procedure với tên là GetAllProducts(), 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 Products. 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 Procedure như sau:

1
2
3
4
5
6
DELIMITER $$
CREATE PROCEDURE procedureName()
BEGIN
   /*Xu ly*/
END; $$
DELIMITER ;

Trong đó:

  • Dòng đầu tiên 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. Đây là cú pháp nên bắt buộc bạn phải nhập như vậy
  • Dòng CREATE PROCEDURE procedureName() dùng để khai báo tạo một Procedure mới, trong đó procedureName chính là tên thủ tục còn hai từ đầu là từ khóa.
  • BEGIN và END; $$ dùng để khai báo bắt đầu của Procedure và kết thúc Procedure
  • Cuối cùng là đóng lại ô lưu trữ DELIMITER ;

Lưu ý là bạn phải tuân theo cú pháp như trên nhé, ban chỉ việc thay đổi tên của thủ tục là ok.

Bây giờ để tạo mới một Procedure với tên là GetAllProduct thì chúng ta sẽ làm như sau:

1
2
3
4
5
6
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ới một thủ tục với tên là GetAllProduct rồi đấy. Nếu như bạn sử dụng SqlYog thì bạn vào table Products và vào mục Stored Procs sẽ thấy một thủ tục vừa được tạo:

tao moi stored procedure mysql png

Gọi Stored Procedure

Tạo xong rồi bây giờ làm thế nào để gọi đến Store này? Đơn giản để gọi tới Store nào thì ta chỉ cần dùng cú pháp như sau:

1
CALL storeName();

Như vậy để gọi tới Procedure tên là GetAllProducts thì ta làm như sau:

1
CALL GetAllProducts();

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 records mà ta đã thêm ở phần 1:

tao-moi-stored-procedure-mysql-1.png

Xem danh sách Stored Procedure trong hệ thống

Nếu bạn không sử dụng SqlYog thì rất khó để quản lý Procedure 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 Stored Procedure bằng cách chạy lệnh sau:

1
show procedure status;

Sau khi chạy lên bạn sẽ nhận được kết quả dạng như sau:

tao moi stored procedure mysql 2 png

Đây chính là Procedure mà ta đã tạo ở trên.

Sửa Stored Procedure đã tạo

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. Tuy nhiên có một lưu ý đó là nếu như bạn đã chạy lệnh tạo Procedure một lần rồi, sau đó bạn edit 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 thì chúng ta sẽ dùng lệnh Drop để xóa đi Procedure đó và tạo lại:

1
2
3
4
5
6
7
8
9
10
DELIMITER $$
 
DROP PROCEDURE IF EXISTS `GetAllProducts`$$
 
CREATE PROCEDURE `GetAllProducts`()
BEGIN
   SELECT FROM products;
END$$
 
DELIMITER ;

Và một lưu ý nữa là khi bạn 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:

1
2
3
4
5
6
7
8
9
10
DELIMITER $$
 
DROP PROCEDURE IF EXISTS `GetAllProducts`$$
 
CREATE DEFINER=`root`@`localhost` PROCEDURE `GetAllProducts`()
BEGIN
   SELECT FROM products;
END$$
 
DELIMITER ;

Dòng chữ DEFINER=`root`@`localhost` 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ì, . Bài tiếp theo chúng ta sẽ học cách khai tham số truyền vào cho Procedure và cách truyền biến vào khi gọi hàm. Mời các bạn đón xem nhse.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
Tạo MySQL Stored Procedure đầu tiên, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master