MySQL Chức năng: Chuỗi, Số, Do người dùng xác định, Đã lưu trữ

Chức năng là gì?

MySQL có thể làm được nhiều việc hơn là chỉ lưu trữ và truy xuất dữ liệu. Chúng tôi cũng có thể thực hiện các thao tác trên dữ liệu trước khi lấy hoặc lưu nó. Đó là nơi MySQL Các hàm xuất hiện. Các hàm chỉ đơn giản là các đoạn mã thực hiện một số thao tác và sau đó trả về kết quả. Một số hàm chấp nhận tham số trong khi các hàm khác không chấp nhận tham số.

Chúng ta hãy xem xét ngắn gọn một ví dụ về MySQL chức năng. Theo mặc định, MySQL lưu các kiểu dữ liệu ngày ở định dạng “YYYY-MM-DD”. Giả sử chúng tôi đã xây dựng một ứng dụng và người dùng của chúng tôi muốn ngày được trả về ở định dạng “DD-MM-YYYY”, chúng tôi có thể sử dụng MySQL được xây dựng trong hàm DATE_FORMAT để đạt được điều này. DATE_FORMAT là một trong những hàm được sử dụng nhiều nhất trong MySQL. Chúng ta sẽ xem xét chi tiết hơn khi tìm hiểu bài học.

Tại sao nên sử dụng chức năng?

Tại sao nên sử dụng Hàm

Dựa vào ví dụ được đưa ra trong phần giới thiệu, những người có kinh nghiệm về lập trình máy tính có thể đang nghĩ “Tại sao phải bận tâm? MySQL Chức năng? Hiệu quả tương tự có thể đạt được với ngôn ngữ lập trình/tập lệnh?” Đúng là chúng ta có thể đạt được điều đó bằng cách viết một số thủ tục/chức năng trong chương trình ứng dụng.

Quay lại ví dụ DATE của chúng tôi trong phần giới thiệu, để người dùng của chúng tôi có được dữ liệu ở định dạng mong muốn, lớp nghiệp vụ sẽ phải thực hiện các quá trình xử lý cần thiết.

Điều này trở thành vấn đề khi ứng dụng phải tích hợp với các hệ thống khác. Khi chúng tôi sử dụng MySQL chẳng hạn như DATE_FORMAT, thì chúng ta có thể nhúng chức năng đó vào cơ sở dữ liệu và bất kỳ ứng dụng nào cần dữ liệu sẽ nhận được dữ liệu ở định dạng được yêu cầu. Cái này giảm việc phải làm lại logic nghiệp vụ và giảm sự không nhất quán của dữ liệu.

Một lý do khác khiến chúng ta nên cân nhắc sử dụng MySQL thực tế là nó có thể giúp giảm lưu lượng mạng trong các ứng dụng máy khách/máy chủ. Lớp nghiệp vụ sẽ chỉ cần thực hiện cuộc gọi đến các chức năng được lưu trữ mà không cần thao tác với dữ liệu. Nhìn chung, việc sử dụng các chức năng có thể giúp cải thiện đáng kể hiệu suất tổng thể của hệ thống.

Các loại chức năng

Chức năng tích hợp sẵn

MySQL đi kèm với một số chức năng được tích hợp sẵn. Các hàm tích hợp đơn giản là các hàm đã được triển khai trong MySQL máy chủ. Các hàm này cho phép chúng ta thực hiện các loại thao tác khác nhau trên dữ liệu. Các hàm tích hợp có thể được phân loại cơ bản thành các loại được sử dụng nhiều nhất sau đây.

  • Hàm chuỗi – thao tác trên kiểu dữ liệu chuỗi
  • Các hàm số – thao tác trên các kiểu dữ liệu số
  • Hàm ngày – hoạt động trên các kiểu dữ liệu ngày
  • Chức năng tổng hợp – hoạt động trên tất cả các loại dữ liệu trên và tạo ra các tập kết quả tóm tắt.
  • các chức năng khác – MySQL cũng hỗ trợ các loại hàm dựng sẵn khác nhưng chúng tôi sẽ chỉ giới hạn bài học của mình ở các hàm có tên ở trên.

Bây giờ chúng ta hãy xem xét chi tiết từng chức năng được đề cập ở trên. Chúng tôi sẽ giải thích các chức năng được sử dụng nhiều nhất bằng cách sử dụng “Myflixdb” của chúng tôi.

Hàm chuỗi

Chúng ta đã xem xét chức năng của các hàm chuỗi. Chúng ta sẽ xem xét một ví dụ thực tế sử dụng chúng. Trong bảng phim của chúng tôi, tiêu đề phim được lưu trữ bằng cách sử dụng kết hợp chữ in thường và in hoa. Giả sử chúng ta muốn nhận một danh sách truy vấn trả về tiêu đề phim bằng chữ in hoa. Chúng ta có thể sử dụng chức năng “UCASE” để làm điều đó. Nó lấy một chuỗi làm tham số và chuyển đổi tất cả các chữ cái thành chữ hoa. Kịch bản hiển thị bên dưới minh họa cách sử dụng chức năng “UCASE”.

SELECT `movie_id`,`title`, UCASE(`title`)  FROM `movies`;

tại ĐÂY

  • UCASE(`title`) là hàm dựng sẵn lấy tiêu đề làm tham số và trả về nó bằng chữ in hoa với tên bí danh `upper_case_title`.

Thực thi đoạn script trên trong MySQL workbench so với Myflixdb cung cấp cho chúng ta kết quả như hình dưới đây.

movie_id title UCASE('title')
16 67% Guilty 67% GUILTY
6 Angels and Demons ANGELS AND DEMONS
4 Code Name Black CODE NAME BLACK
5 Daddy's Little Girls DADDY'S LITTLE GIRLS
7 Davinci Code DAVINCI CODE
2 Forgetting Sarah Marshal FORGETTING SARAH MARSHAL
9 Honey mooners HONEY MOONERS
19 movie 3 MOVIE 3
1 Pirates of the Caribean 4 PIRATES OF THE CARIBEAN 4
18 sample movie SAMPLE MOVIE
17 The Great Dictator THE GREAT DICTATOR
3 X-Men X-MEN

MySQL hỗ trợ một số hàm chuỗi. Để biết danh sách đầy đủ tất cả các hàm chuỗi tích hợp, hãy tham khảo liên kết này http://dev.mysql.com/doc/refman/5.0/en/string-functions.html on MySQL trang web.

Các hàm số

Như đã đề cập trước đó, các hàm này hoạt động trên các kiểu dữ liệu số. Chúng ta có thể thực hiện các phép tính toán học trên dữ liệu số trong câu lệnh SQL.

Toán tử số học

MySQL hỗ trợ các toán tử số học sau đây có thể được sử dụng để thực hiện tính toán trong các câu lệnh SQL.

Họ tên Mô tả
BHTG Phép chia số nguyên
/ Phòng
Trừ
+ Ngoài ra
* Phép nhân
% hoặc MOD Mô-đun

Bây giờ chúng ta hãy xem các ví dụ của từng toán tử trên

Phép chia số nguyên (DIV)

SELECT 23 DIV 6 ;

Thực hiện đoạn mã trên sẽ cho chúng ta kết quả sau.

3

Toán tử chia (/)

Bây giờ chúng ta hãy xem ví dụ về toán tử chia. Chúng tôi sẽ sửa đổi ví dụ DIV.

SELECT 23 / 6 ;

Thực hiện đoạn mã trên sẽ cho chúng ta kết quả sau.

3.8333

Toán tử trừ (-)

Bây giờ chúng ta hãy xem ví dụ về toán tử trừ. Chúng ta sẽ sử dụng các giá trị giống như trong hai ví dụ trước

SELECT 23 - 6 ;

Việc thực thi đoạn script trên cho chúng ta 17

Toán tử cộng (+)

Bây giờ chúng ta hãy xem ví dụ về toán tử cộng. Chúng tôi sẽ sửa đổi ví dụ trước.

SELECT 23 + 6 ;

Việc thực thi đoạn script trên cho chúng ta 29

Toán tử nhân (*)

Bây giờ chúng ta hãy xem ví dụ về toán tử nhân. Chúng tôi sẽ sử dụng các giá trị tương tự như trong các ví dụ trước.

SELECT 23 * 6 AS `multiplication_result`;

Thực hiện đoạn mã trên sẽ cho chúng ta kết quả sau.

kết quả phép nhân
138

Toán tử modulo (-)

Toán tử modulo chia N cho M và cho chúng ta số dư. Bây giờ chúng ta hãy xem ví dụ về toán tử modulo. Chúng tôi sẽ sử dụng các giá trị tương tự như trong các ví dụ trước.

SELECT 23 % 6 ;

OR

SELECT 23 MOD 6 ;

Việc thực thi đoạn script trên cho chúng ta 5

Bây giờ chúng ta hãy xem xét một số hàm số phổ biến trong MySQL.

Sàn nhà – hàm này xóa các chữ số thập phân khỏi một số và làm tròn đến số thấp nhất gần nhất. Đoạn mã dưới đây minh họa cách sử dụng của nó.

SELECT FLOOR(23 / 6) AS `floor_result`;

Thực hiện đoạn mã trên sẽ cho chúng ta kết quả sau.

Tầng_kết quả
3

Tròn – hàm này làm tròn số có chữ số thập phân thành số nguyên gần nhất. Đoạn mã lệnh hiển thị bên dưới minh họa cách sử dụng của hàm này.

SELECT ROUND(23 / 6) AS `round_result`;

Thực hiện đoạn mã trên sẽ cho chúng ta kết quả sau.

Kết quả vòng
4

Rand – hàm này được sử dụng để tạo một số ngẫu nhiên, giá trị của nó thay đổi mỗi khi hàm được gọi. Kịch bản hiển thị bên dưới thể hiện cách sử dụng của nó.

SELECT RAND() AS `random_result`;

Chức năng được lưu trữ

Các hàm được lưu trữ cũng giống như các hàm được tích hợp sẵn ngoại trừ việc bạn phải tự xác định hàm được lưu trữ. Khi một hàm lưu trữ đã được tạo, nó có thể được sử dụng trong các câu lệnh SQL giống như bất kỳ hàm nào khác. Cú pháp cơ bản để tạo một hàm được lưu trữ như dưới đây

CREATE FUNCTION sf_name ([parameter(s)])
   RETURNS data type
   DETERMINISTIC
   STATEMENTS

tại ĐÂY

  • “TẠO CHỨC NĂNG sf_name ([(các) tham số]) “ là bắt buộc và cho biết MySQL máy chủ để tạo một hàm có tên `sf_name' với các tham số tùy chọn được xác định trong dấu ngoặc đơn.
  • “TRẢ LẠI kiểu dữ liệu” là bắt buộc và chỉ định kiểu dữ liệu mà hàm sẽ trả về.
  • “XÁC ĐỊNH” có nghĩa là hàm sẽ trả về cùng một giá trị nếu các đối số giống nhau được cung cấp cho nó.
  • "CÁC CÂU LỆNH" là mã thủ tục mà hàm thực thi.

Bây giờ chúng ta hãy xem một ví dụ thực tế triển khai một hàm tích hợp. Giả sử chúng ta muốn biết những bộ phim đã thuê nào đã quá ngày trả lại. Chúng ta có thể tạo một hàm được lưu trữ chấp nhận ngày trả lại làm tham số và sau đó so sánh với ngày hiện tại trong MySQL máy chủ. Nếu ngày hiện tại nhỏ hơn ngày quay phim thì chúng ta trả về “Không”, nếu không chúng ta trả về “Có”. Kịch bản hiển thị bên dưới giúp chúng tôi đạt được điều đó.

DELIMITER |
CREATE FUNCTION sf_past_movie_return_date (return_date DATE)
  RETURNS VARCHAR(3)
   DETERMINISTIC
    BEGIN
     DECLARE sf_value VARCHAR(3);
        IF curdate() > return_date
            THEN SET sf_value = 'Yes';
        ELSEIF  curdate() <= return_date
            THEN SET sf_value = 'No';
        END IF;
     RETURN sf_value;
    END|

Việc thực thi đoạn script trên đã tạo ra hàm được lưu trữ `sf_past_movie_return_date`.

Bây giờ hãy kiểm tra chức năng được lưu trữ của chúng tôi.

SELECT `movie_id`,`membership_number`,`return_date`,CURDATE() ,sf_past_movie_return_date(`return_date`)  FROM `movierentals`;

Thực thi đoạn script trên trong MySQL workbench so với myflixdb cung cấp cho chúng ta kết quả sau.

movie_id membership_number return_date CURDATE() sf_past_movie_return_date('return_date')
1 1 NULL 04-08-2012 NULL
2 1 25-06-2012 04-08-2012 yes
2 3 25-06-2012 04-08-2012 yes
2 2 25-06-2012 04-08-2012 yes
3 3 NULL 04-08-2012 NULL

Các chức năng do người dùng xác định

MySQL cũng hỗ trợ các chức năng do người dùng xác định mở rộng MySQL. Hàm do người dùng xác định là các hàm mà bạn có thể tạo bằng ngôn ngữ lập trình như C, C++ v.v. và sau đó thêm chúng vào MySQL máy chủ. Sau khi thêm vào, chúng có thể được sử dụng giống như bất kỳ chức năng nào khác.

Tổng kết

  • Chức năng cho phép chúng ta nâng cao khả năng của MySQL.
  • Các hàm luôn trả về một giá trị và có thể tùy ý chấp nhận các tham số.
  • Các chức năng tích hợp là các chức năng được cung cấp cùng với MySQL. Chúng có thể được phân loại theo kiểu dữ liệu mà chúng xử lý, ví dụ như chuỗi, ngày tháng và các hàm tích hợp dạng số.
  • Các chức năng lưu trữ được tạo bởi người dùng trong MySQL máy chủ và có thể được sử dụng trong các câu lệnh SQL.
  • Các hàm do người dùng xác định được tạo bên ngoài MySQL và có thể được đưa vào MySQL máy chủ.