Câu lệnh IF-ELSE

Mệnh đề if thì không cần nói nhiều khi lập trình thì đã quá quen thuộc, cho phép bạn tạo luồng xử lý rẻ nhánh, nếu đúng thì thực thi và ngược lại mệnh đề sai thì nó sẽ không thực thi. Chúng ta sẻ kết hợp các toán tử, toán hạng và biến để tạo ra các mệnh đề đúng sai trong điều kiện của lệnh:

Cú pháp như sau:


IF expression_1 THEN
   code 1
ELSEIF expression_2 THEN
   code 2
ELSE
   code 3
END IF;

Mệnh đề này đương nhiên tùy theo bạn mà có thể dùng nhiều elseif, chỉ cần điều kiện expression_1 đúng sẽ thực hiện dòng code 1 bên dưới không đúng sẽ thực hiện kiểm tra expression_2 đúng thực code 2, không đúng nữa thì thực hiện code 3 và kết thúc tại đây, xem ví dụ sẽ thấy rõ hơn.

Ví dụ cho IF ELSE:

Trước tiên chúng ta sẽ tạo một bảng dữ liệu mới là user:


CREATE TABLE IF NOT EXISTS `users` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(30) COLLATE utf8_unicode_ci DEFAULT NULL,
  `password` VARCHAR(32) COLLATE utf8_unicode_ci DEFAULT NULL,
  `level` TINYINT(1) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

INSERT INTO `users` (`id`, `username`, `password`, `level`) VALUES
(1, 'nongdanit', md5(123456), 1),
(2, 'nongdanit1',md5(123456), 2),
(3, 'nongdanit2', md5(123456), 3);

Ý nghĩa như sau: password được mã hóa md5, level có 3 giá trị, 1 là admin, 2 là author, 3 là member.

Cách thực hiện:

  • Tạo Procedure với tham số truyền vào là gồm username và password thuộc loại IN, còn result thuộc loại OUT.
  • Tạo một biến flag để lưu trữ level của người dùng, giá trị khởi tạo của nó là 0. Sau khi thực hiện lệnh SELECT nếu giá trị flag = 0 tức là không tồn tại username và password, ngược lại thì ta sẽ kiểm tra flag để trả về kết quả tương ứng với giá trị level.

Tạo Procedure như hình:

if_else_mysql

hoặc theo đoạn cú pháp sau:


CREATE PROCEDURE `Login`(
  IN text_username VARCHAR(255),
  IN text_password VARCHAR(255),
  OUT result VARCHAR(255)
)
BEGIN
/*Tao bien flag. Mac dinh la 0*/
  DECLARE flag INT(11) DEFAULT 0;
/*Thuc hien truy van gan level vao bien flag*/
  SELECT level INTO flag FROM users WHERE username = text_username AND password = MD5(text_password);
/*Nếu sau khi thực hiện lệnh select này mà ko có dữ liệu flag sẽ không đổi, tức là User không tồn tại*/
  IF (flag = 0) THEN
   SET result = 'User không tồn tại';
  ELSEIF (flag = 1) THEN
   SET result = 'Chào admin';
  ELSEIF (flag = 2) THEN
   SET result = 'Chào author';
  ELSE
   SET result = 'Chào member';
  END IF;
END

Gọi hàm:


CALL Login('nongdanit', '123456', @result);
SELECT @result;

Kết quả nó sẽ là “chào admin”, thay đổi về username và password để xem kết quả nhá.

Câu lệnh CASE

Lệnh này tương tự như  Switch case trong PHP, lệnh case trong MySQL dùng để rẻ nhánh dòng xử lý, nếu trường hợp nào đúng thì sẽ thực thi và thoát khỏi lệnh CASE.

Cú pháp:


CASE case_value
  WHEN when_value THEN statement_list
  [WHEN when_value THEN statement_list] ...
  [ELSE statement_list]
END CASE;

Với:

  • when_value khi đúng sẽ thực thi câu lệnh phía sau THEN liền kề.
  • ELSE chính là trường hợp cuối cùng nếu như các điều kiện WHEN ở trên không đúng thì nó sẽ được chạy. ELSE này chính là lệnh default trong Switch Case.

Ví dụ: Viết Stored Procedure nhập vào một số bất kỳ và kiểm tra số đó xem có tương ứng với các thứ trong tuần hay không, sử dụng lệnh CASE trong MYSQL

Dòng lệnh như sau:

DROP PROCEDURE IF EXISTS `thuTrongTuan`;
DELIMITER $$
CREATE PROCEDURE `thuTrongTuan`(IN so INT(11))
  BEGIN
    DECLARE message VARCHAR(255);
  CASE so
  WHEN 2 THEN
   SET message = 'thu hai';
  WHEN 3 THEN
   SET message = 'thu ba';
  WHEN 4 THEN
   SET message = 'thu tu';
  WHEN 5 THEN
   SET message = 'thu nam';
  WHEN 6 THEN
   SET message = 'thu sau';
  WHEN 7 THEN
   SET message = 'thu bay';
  WHEN 8 THEN
   SET message = 'chu nhat';
  ELSE
   SET message = 'KHONG CO THU TRONG TUAN';
  END CASE;
  SELECT message;
END;

Hoặc theo hình sau:case-in-mysql

Gọi lệnh:

Call thuTrongTuan(2); // thu hai

Call thuTrongTuan(3); //thu ba

Thay thế các số và nhìn xem kết quả 😀

Vòng lặp while do trong MySql

Cú pháp:

WHILE search_condition DO
  statement_list
END WHILE

Nếu biểu thức search_condition có giá trị là sai thì vòng lặp sẽ dừng, ngược lại thì vòng lặp sẽ được thực hiện. Vì vậy khi sử dụng phải cẩn thận để không bị lặp vô hạn.

Ví dụ:

Viết chương trình Stored Procedure in ra các số từ x tới y bằng vòng lặp While.

Chúng ta tìm hiểu thêm một hàm CONCAT dùng để nối chuỗi trong MySQL, tham số truyền vào của nó là danh sách các chuỗi cần nối lại và cách nhau bởi dấu phẩy.

DROP PROCEDURE IF EXISTS While_Do_Example;
DELIMITER $$
CREATE PROCEDURE While_Do_Example(
  IN x INT(11),
  IN y INT(11)
)
BEGIN
  DECLARE str VARCHAR(255) DEFAULT '';
  WHILE (x <= y) DO
   SET str = CONCAT(str,x,',');
   SET x = x + 1;
  END WHILE;
  SELECT str;
END;

Hình ảnh như sau:

While_Do_Example

Gọi hàm như sau: CALL While_Do_Example( 1, 10 );

Kết luận

  1. Nếu có thắc mắc gì các bạn để lại comment bên dưới mình sẽ trả lời sớm nhất có thể.
  2. Cảm ơn các bạn đã đọc.

Nongdanit.info
[Mysql] – Bài 3 – If else, case, while do trong Mysql
Tagged on: