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

Anonim

Các 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 truy xuất hoặc lưu nó. Đó là nơi các Hàm MySQL 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ố hoạt động và sau đó trả về một 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ố.

Hãy 'xem xét ngắn gọn một ví dụ về hàm MySQL. Theo mặc định, MySQL lưu các kiểu dữ liệu ngày tháng ở đị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 tích hợp 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 nó chi tiết hơn khi chúng ta mở ra bài học.

Tại sao phải sử dụng các hàm?

Dựa trên 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ể nghĩ "Tại sao lại bận tâm đến Hàm MySQL? Hiệu quả tương tự có thể đạt được với ngôn ngữ lập trình / kịch bản?" Đúng là chúng ta có thể đạt được điều đó bằng cách viết một số thủ tục / hàm 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 nhận được dữ liệu ở định dạng mong muốn, lớp nghiệp vụ sẽ phải thực hiện các xử lý cần thiết.

Điều này trở thành một 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 các hàm MySQL chẳng hạn như DATE_FORMAT, thì chúng tôi 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ẽ lấy nó ở định dạng bắt buộc. Điều này làm giảm công việc lại trong 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 tại sao chúng ta nên xem xét sử dụng các hàm MySQL là 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 lệnh gọi đến các chức năng được lưu trữ mà không cần thao tác dữ liệu. Trung bình, 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ố hàm tích hợp sẵn. Các hàm tích hợp chỉ đơn giản là các hàm đã được cài sẵn trong máy chủ MySQL. Các chức năng này cho phép chúng ta thực hiện các kiểu thao tác khác nhau trên dữ liệu. Về cơ bản, các hàm tích hợp có thể được phân loại thành các loại được sử dụng nhiều nhất sau đây.

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

Bây giờ chúng ta hãy xem xét từng chức năng được đề cập ở trên một cách chi tiết. 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 chuỗi hoạt động như thế nào. 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 các chữ cái thường và chữ hoa. Giả sử chúng ta muốn lấy một danh sách truy vấn trả về tiêu đề phim bằng chữ hoa. Chúng ta có thể sử dụng chức năng "UCASE" để làm điều đó. Nó nhận một chuỗi làm tham số và chuyển đổi tất cả các chữ cái thành chữ hoa. Tập lệnh hiển thị bên dưới minh họa việc sử dụng chức năng "UCASE".

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

ĐÂY

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

Thực thi tập lệnh trên trong MySQL workbench so với Myflixdb cho chúng ta kết quả sau được hiển thị bên dưới.

 
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. Để có danh sách đầy đủ tất cả các hàm chuỗi được tích hợp sẵn, hãy tham khảo liên kết này http://dev.mysql.com/doc/refman/5.0/en/string-functions.html trên trang web MySQL.

Các hàm số

Như đã đề cập trước đó, các hàm này hoạt động trên 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ác câu lệnh SQL.

Toán tử Arithematic

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

Tên

Sự miêu tả

DIV

Phép chia số nguyên

/

Sư đoàn

-

Phép trừ

+

Thêm vào

*

Phép nhân

% hoặc MOD

Mô đun

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

Phân chia số nguyên (DIV)

SELECT 23 DIV 6 ;

Việc thực thi script trên cho chúng ta kết quả sau.

3

Toán tử bộ phận (/)

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

SELECT 23 / 6 ;

Việc thực thi script trên cho chúng ta kết quả sau.

3.8333

Toán tử trừ (-)

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

SELECT 23 - 6 ;

Thực thi đoạn mã trên cho chúng ta 17

Toán tử cộng (+)

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

SELECT 23 + 6 ;

Thực thi đoạn mã trên cho chúng ta 29

Toán tử nhân (*)

Bây giờ chúng ta hãy xem xét ví dụ 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`;

Việc thực thi script trên cho chúng ta kết quả sau.

Multilication_result

138

Toán tử modulo (-)

Toán tử modulo chia N cho M và cho chúng ta phần dư. Bây giờ chúng ta hãy xem xét 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 ;

HOẶC LÀ

SELECT 23 MOD 6 ;

Thực thi đoạn mã 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.

Tầng - chức năng này loại bỏ các vị trí thập phân khỏi một số và làm tròn nó đến số thấp nhất gần nhất. Tập lệnh hiển thị bên dưới thể hiện cách sử dụng của nó.

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

Việc thực thi script trên cho chúng ta kết quả sau.

Floor_result

3

Làm tròn - hàm này làm tròn một số có chữ số thập phân đến số nguyên gần nhất. Tập lệnh hiển thị bên dưới thể hiện cách sử dụng của nó.

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

Việc thực thi script trên cho chúng ta kết quả sau.

Round_result

4

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

SELECT RAND() AS `random_result`;

Các 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ự định nghĩa hàm được lưu trữ. Khi một hàm được 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ư hình dưới đây

CREATE FUNCTION sf_name ([parameter(s)])RETURNS data typeDETERMINISTICSTATEMENTS

ĐÂY

  • "TẠO CHỨC NĂNG sf_name ([tham số (s)])" là bắt buộc và yêu cầu máy chủ MySQL 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 ngoặc đơn.
  • "Kiểu dữ liệu RETURNS" là bắt buộc và chỉ định kiểu dữ liệu mà hàm sẽ trả về.
  • "DETERMINISTIC" có nghĩa là hàm sẽ trả về các giá trị giống nhau nếu các đối số giống nhau được cung cấp cho nó.
  • "STATEMENTS" là mã thủ tục mà hàm thực thi.

Bây giờ chúng ta hãy xem xét một ví dụ thực tế triển khai một hàm tích hợp sẵn. Giả sử chúng ta muốn biết 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ả về làm tham số và sau đó so sánh nó với ngày hiện tại trong máy chủ MySQL. Nếu ngày hiện tại nhỏ hơn ngày phim trở lại, thì chúng tôi trả về "Không", nếu không chúng tôi 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)DETERMINISTICBEGINDECLARE sf_value VARCHAR(3);IF curdate() > return_dateTHEN SET sf_value = 'Yes';ELSEIF curdate() <= return_dateTHEN SET sf_value = 'No';END IF;RETURN sf_value;END|

Việc thực thi đoạn mã 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 tập lệnh trên trong MySQL workbench với myflixdb 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 hàm do người dùng định nghĩa để mở rộng MySQL. Các hàm do người dùng định nghĩa 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 máy chủ MySQL. Sau khi được 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óm lược

  • Các chức năng cho phép chúng tôi 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ọn chấp nhận các tham số.
  • Các hàm tích hợp sẵn là các hàm được vận chuyển cùng với MySQL. Chúng có thể được phân loại theo kiểu dữ liệu mà chúng hoạt động trên đó, chẳng hạn như chuỗi, ngày tháng và số được xây dựng trong các hàm.
  • Các hàm được lưu trữ được tạo bởi người dùng trong máy chủ MySQL và có thể được sử dụng trong các câu lệnh SQL.
  • Các hàm do người dùng định nghĩa được tạo bên ngoài MySQL và có thể được kết hợp vào máy chủ MySQL.