VIEW
STORED PROCEDURE
INDEX
FULL TEXT SEARCH
TRIGGER
TIPS
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Câu lệnh if else trong MYSQL

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é.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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:

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:

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 usernamepassword thuộc loại IN, còn result thuộc loại OUT để lấy sử dụng. Nếu chưa biết hai khái niệm INOUT 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ệnh SELECT nếu giá trị flag = -1 tức là không tồn tại usernamepassword trong CSDL, ngược lại thì ta sẽ check flag để trả về kết quả tương ứng.

Bài giải:

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:

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!

Cùng chuyên mục:

Hàm ENCRYPT trong MySQL

Hàm ENCRYPT trong MySQL

Cách sử dụng ENCRYPT trong MySQL

Hàm MD5 trong MySQL

Hàm MD5 trong MySQL

Cách sử dụng MD5 trong MySQL

Hàm OLD_PASSWORD trong MySQL

Hàm OLD_PASSWORD trong MySQL

Cách sử dụng OLD_PASSWORD trong MySQL

Hàm PASSWORD trong MySQL

Hàm PASSWORD trong MySQL

Cách sử dụng PASSWORD trong MySQL

Hàm ASCII trong MySQL

Hàm ASCII trong MySQL

Cách sử dụng ASCII trong MySQL

Hàm CHAR_LENGTH trong MySQL

Hàm CHAR_LENGTH trong MySQL

Cách sử dụng CHAR_LENGTH trong MySQL

Hàm CHARACTER_LENGTH trong MySQL

Hàm CHARACTER_LENGTH trong MySQL

Cách sử dụng CHARACTER_LENGTH trong MySQL

Hàm CONCAT trong MySQL

Hàm CONCAT trong MySQL

Cách sử dụng CONCAT trong MySQL

Hàm CONCAT_WS trong MySQL

Hàm CONCAT_WS trong MySQL

Cách sử dụng CONCAT_WS trong MySQL

Hàm FIELD trong MySQL

Hàm FIELD trong MySQL

Cách sử dụng FIELD trong MySQL

Hàm FIND_IN_SET trong MySQL

Hàm FIND_IN_SET trong MySQL

Cách sử dụng FIND_IN_SET trong MySQL

Hàm FORMAT trong MySQL

Hàm FORMAT trong MySQL

Cách sử dụng FORMAT trong MySQL

Hàm INSERT trong MySQL

Hàm INSERT trong MySQL

Cách sử dụng INSERT trong MySQL

Hàm INSTR trong MySQL

Hàm INSTR trong MySQL

Cách sử dụng INSTR trong MySQL

Hàm LCASE trong MySQL

Hàm LCASE trong MySQL

Cách sử dụng LCASE trong MySQL

Hàm LEFT trong MySQL

Hàm LEFT trong MySQL

Cách sử dụng LEFT trong MySQL

Hàm LENGTH trong MySQL

Hàm LENGTH trong MySQL

Cách sử dụng LENGTH trong MySQL

Hàm LOCATE trong MySQL

Hàm LOCATE trong MySQL

Cách sử dụng LOCATE trong MySQL

Hàm LOWER trong MySQL

Hàm LOWER trong MySQL

Cách sử dụng LOWER trong MySQL

Hàm LPAD trong MySQL

Hàm LPAD trong MySQL

Cách sử dụng LPAD trong MySQL

Top