Khi làm việc với Stored Procedure thì bạn không thể thiếu hàm If
được vì chúng ta cũng phải kết hợp if với các hàm khác để xử lý các luồng đi trong Procedure
. Nên trong bài này chúng ta sẽ tìm hiểu mệnh đề if trước rồi sau đó tìm hiểu các phần khác.
Tới đây chắc hẳn bạn thấy MYSQL
cũng có nhiều cái giống các ngôn ngữ lập trình phải không nào? Ừ thì đương nhiên rồi vì T-SQL
cũng là một ngôn ngữ lập trình mà, nhưng có điều nó không mạnh bằng các ngôn ngữ khác. Không chừng chừ nữa, ta bắt đầu nhé.
Mục lục
- 1. Tìm hiểu mệnh đề if else trong MySql
- 2. Ví dụ mềnh đề if else trong MySql Stored Procedure
- Lời kết:
1. Tìm hiểu mệnh đề if else trong MySql
Mệnh đề if cho phép bạn tạo luồng xử lý rẻ nhánh, nếu đúng thì thực thì và ngược lại mệnh đề sai thì nó sẽ không thực thi. Thông thường chúng ta kết hợp các toán tử, toán hạng và biến trong mysql để tạo ra các mệnh đề đúng sai trong điều kiện của lệnh IF
. Không những chỉ có IF
mà ta có thể sử dụng mệnh đề IF ELSE
trong MYSQL
cũng được.
Cú pháp mệnh đề if - else trong MYSQL như sau:
Bài viết này được đăng tại tranvanbinh.vn
1 2 3 4 5 6 7 | IF if_expression THEN commands ELSEIF elseif_expression THEN commands ELSE commands END IF; |
Luồng đi như sau:
- Nếu
if_expression
đúng thì nó sẽ thực thi câu lệnh bên dưới nó, ngược lại nó bỏ qua và nhảy xuống IFELSE - Nó kiểm tra mệnh đề
IFELSE
, nếu mệnh đề này đúng thì nó xử lệnh bên dưới, ngươc lại thì nó bỏ qua và nhảy tiếp xuống dưới. - Ở dưới nó nhận thấy chỉ còn có
ELSE
nên thực thi luôn chứ không cần kiểm tra điều kiện nữa.
Lưu ý với bạn là ta có thể có nhiều IFELSE chứ không phải chỉ 1 cái như trong ví dụ trên.
2. Ví dụ mềnh đề if else trong MySql Stored Procedure
Bây giờ ta sẽ làm một ví dụ cho bạn dễ hiểu hơn. Trước tiên ta cần tạo một bảng thành viên và insert một số thông tin Username và Password. Bạn chạy lệnh sau để tạo bảng:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | CREATE TABLE IF NOT EXISTS `members` ( `us_id` INT (11) NOT NULL AUTO_INCREMENT, `us_username` VARCHAR (30) COLLATE utf8_unicode_ci DEFAULT NULL , `us_password` VARCHAR (32) COLLATE utf8_unicode_ci DEFAULT NULL , `us_level` TINYINT(1) DEFAULT '0' , PRIMARY KEY (`us_id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE =utf8_unicode_ci AUTO_INCREMENT=4 ; -- -- Contenu de la table `members` -- INSERT INTO `members` (`us_id`, `us_username`, `us_password`, `us_level`) VALUES (1, 'admin' , '57e34a1be668ebd6e40d430806beb099' , 1), (2, 'member' , '57e34a1be668ebd6e40d430806beb099' , 2), (3, 'banded' , '57e34a1be668ebd6e40d430806beb099' , 0); |
Trong bảng này ta cần chú ý đến field us_level
như sau:
- Nếu
us_level = 0
=> tài khoản bị khóa - Nếu
us_level = 1
=> admin - Nếu
us_level = 2
=> member
Bây giờ ta viết Procedure đăng nhập với yêu cầu như sau:
- Nếu
us_level = 0
=> tài khoản bị khóa - Nếu
us_level = 1
=> là admin - Nếu
us_level = 2
=> là member - Nếu không tồn tại => đăng nhập sai
Ý tưởng:
- Tạo Procedure với tham số truyền vào là gồm
username
vàpassword
thuộc loạiIN
, cònresult
thuộc loạiOUT
để lấy sử dụng. Nếu chưa biết hai khái niệmIN
vàOUT
vui lòng đọc lại bài tham số trong Procedure. - Ta sẽ tạo một biến flag để lưu trữ
us_level
của người dùng, giá trị khởi tạo của nó là-1
. Sau khi thực hiện lệnhSELECT
nếu giá trịflag = -1
tức là không tồn tạiusername
vàpassword
trong CSDL, ngược lại thì ta sẽ checkflag
để trả về kết quả tương ứng.
Bài giải:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | DELIMITER $$ DROP PROCEDURE IF EXISTS `checkLogin`$$ CREATE PROCEDURE `checkLogin`( IN input_username VARCHAR (255), IN input_password VARCHAR (255), OUT result VARCHAR (255) ) BEGIN /*Bien flag luu tru level . Mac dinh la -1*/ DECLARE flag INT (11) DEFAULT -1; /*Thuc hien truy van gan level vao bien flag*/ SELECT us_level INTO flag FROM members WHERE us_username = input_username AND us_password = MD5(input_password); /*Sau khi thuc hien lenh select nay ma ko co du lieu thi luc nay flag se khong thay doi. Chinh vi the neu flag = -1 tuc la sai thong tin */ IF (flag <= 0) THEN SET result = 'Thong tin dang nhap sai' ; ELSEIF (flag = 0) THEN SET result = 'Tai khoan bi khoa' ; ELSEIF (flag = 1) THEN SET result = 'Tai khoan admin' ; ELSE SET result = 'Tai khoan member' ; END IF; END $$ DELIMITER ; |
Sử dụng:
1 2 3 4 5 6 7 8 9 10 11 12 | CALL checkLogin( 'admin' , 'vancuong' , @result); SELECT @result; -- hoặc CALL checkLogin( 'member' , 'vancuong' , @result); SELECT @result; -- hoặc CALL checkLogin( 'banded' , 'vancuong' , @result); SELECT @result; |
Bạn hãy chạy lên và xem thành quả nhé.
Lời kết:
Câu lệnh if else
trong MySql thường hay sử dụng trong Stored Procedure chứ ít khi được sử dụng trong câu lệnh SELECT
, nếu ở trong SELECT
thì ta thường sử dụng lệnh CASE
để thay thế. Hy vọng qua bài này bạn sẽ hiểu một chút về lệnh if else trong mysql và là tiền đề để học những bài sau nữa. Chúc bạn học tốt!
* 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
=============================
Câu lệnh if else trong MYSQL, 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