Bạn có thể tạo các hàm trong MySQL không?

Bài viết này mô tả cách tạo và thực thi các chức năng và quy trình được lưu trữ của MySQL trên tài khoản Dịch vụ lưu trữ A2 của bạn. Bạn có thể sử dụng các hàm và thủ tục được lưu trữ cho nhiều tình huống khác nhau. Ví dụ: các chức năng và thủ tục được lưu trữ được thiết kế tốt có thể tăng cường bảo mật cơ sở dữ liệu, cải thiện tính toàn vẹn của dữ liệu và tăng hiệu suất

chức năng lưu trữ

Các chức năng được lưu trữ của MySQL cung cấp một cách mạnh mẽ và linh hoạt để thao tác và xử lý dữ liệu. Bạn có thể xác định và chạy các chức năng được lưu trữ trên bất kỳ máy chủ A2 Hosting nào sử dụng MySQL

Thiết lập cơ sở dữ liệu thử nghiệm

Để minh họa một ví dụ cơ bản về các chức năng được lưu trữ, hãy bắt đầu bằng cách tạo cơ sở dữ liệu mà chúng tôi có thể sử dụng cho mục đích thử nghiệm. Trong câu lệnh SQL sau, hãy thay thế tên người dùng bằng tên người dùng tài khoản của bạn

CREATE DATABASE username_test;

Nếu bạn đang sử dụng phpMyAdmin, hãy nhấp vào tên username_test để chọn cơ sở dữ liệu. Mặt khác, nếu bạn đang sử dụng chương trình dòng lệnh mysql, hãy nhập câu lệnh SQL sau

USE username_test;

Tiếp theo, tạo một bảng trong cơ sở dữ liệu username_test có tên là sản phẩm. Để thực hiện việc này, hãy chạy câu lệnh SQL sau

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));

Câu lệnh SQL sau đây thêm một số dữ liệu mẫu vào bảng sản phẩm

INSERT INTO products (prod_name, prod_cost, prod_price) VALUES ('Basic Widget',5.95,8.35),('Micro Widget',0.95,1.35),('Mega Widget',99.95,140.00);
Tạo chức năng được lưu trữ

Bây giờ chúng ta đã có một cơ sở dữ liệu và một bảng để làm việc, chúng ta đã sẵn sàng để tạo một hàm được lưu trữ. Hãy tạo một hàm có tên calcProfit. Hàm này nhận hai tham số đầu vào. chi phí và giá cả của một cái gì đó. Nó tính toán lợi nhuận bằng cách lấy giá trừ đi chi phí, rồi trả về giá trị cho biểu thức gọi

Để tạo chức năng được lưu trữ này, hãy chạy các câu lệnh MySQL sau

DELIMITER $$
CREATE FUNCTION calcProfit(cost FLOAT, price FLOAT) RETURNS DECIMAL(9,2)
BEGIN
  DECLARE profit DECIMAL(9,2);
  SET profit = price-cost;
  RETURN profit;
END$$
DELIMITER ;

Lệnh DELIMITER ở đầu các câu lệnh này ngăn MySQL xử lý định nghĩa hàm quá sớm. Lệnh DELIMITER ở cuối các câu lệnh này sẽ đưa quá trình xử lý trở lại bình thường

Sử dụng chức năng được lưu trữ

Bây giờ bạn có thể thực thi chức năng được lưu trữ trong truy vấn cơ sở dữ liệu. Câu lệnh SQL sau minh họa cách thực hiện việc này

SELECT *, calcProfit(prod_cost,prod_price) AS profit FROM products;

Câu lệnh SQL này trả về các kết quả sau

+---------+--------------+-----------+------------+--------+
| prod_id | prod_name    | prod_cost | prod_price | profit |
+---------+--------------+-----------+------------+--------+
|       1 | Basic Widget |      5.95 |       8.35 |   2.40 |
|       2 | Micro Widget |      0.95 |       1.35 |   0.40 |
|       3 | Mega Widget  |     99.95 |        140 |  40.05 |
+---------+--------------+-----------+------------+--------+

Như bạn có thể thấy, hàm calcProfit tự động tính lợi nhuận (giá trừ chi phí) cho mỗi sản phẩm trong bảng

thủ tục lưu trữ

Các thủ tục được lưu trữ đôi khi bị nhầm lẫn với các chức năng được lưu trữ, nhưng chúng khác nhau ở một số điểm quan trọng. Ví dụ, các thủ tục được lưu trữ phải được gọi bằng câu lệnh CALL, trong khi các hàm được lưu trữ có thể được sử dụng trực tiếp trong các biểu thức SQL. Bạn có thể xác định và chạy các thủ tục lưu trữ trên bất kỳ máy chủ A2 Hosting nào sử dụng MySQL

Các câu lệnh MySQL sau đây trình bày cách tạo một thủ tục lưu trữ rất cơ bản có tên là thủ tụcTest. Quy trình này thực hiện một tra cứu đơn giản trên bảng sản phẩm mà chúng tôi đã sử dụng trong ví dụ về hàm được lưu trữ ở trên. Mặc dù thủ tục này không được sử dụng nhiều trong thực tế, nhưng nó thể hiện đúng cú pháp và cấu trúc để khai báo thủ tục lưu sẵn

DELIMITER $$
CREATE PROCEDURE procedureTest()
BEGIN
  SELECT prod_name FROM products;
END$$
DELIMITER ;

Để thực thi thủ tục được lưu trữ, hãy sử dụng câu lệnh MySQL sau

________số 8

Nếu bạn đang sử dụng phpMyAdmin, hãy nhập câu lệnh MySQL trước đó mà không có tùy chọn \G ở cuối

Thêm thông tin

Để biết thêm thông tin về các thủ tục và chức năng được lưu trữ trong MySQL, vui lòng truy cập http. // nhà phát triển. mysql. com/doc/refman/5. 0/vi/tạo thủ tục. html

Bạn đã tạo một hàm có tên là hello nhận một tham số. Tham số bị bỏ qua và trả về một

SELECT *, calcProfit(prod_cost,prod_price) AS profit FROM products;
6 chứa giá trị 'foobar'. Bạn đã tạo một bảng tên là yar và thêm ba hàng vào đó. Câu lệnh select chạy hàm
SELECT *, calcProfit(prod_cost,prod_price) AS profit FROM products;
7 cho mỗi hàng được trả về theo năm

Trong lập trình, hàm là một phần của quy trình nghiệp vụ hoặc phép tính được gói gọn dưới tên hàm

Khi bạn cần chạy một quy trình hoặc tính toán, bạn có thể thực hiện điều đó bằng cách chỉ cần gọi tên hàm

Đây là một hàm ví dụ trong JavaScript

function hello() {
  console.log("Hello World")
}

hello() // prints Hello World

Trong MySQL, bạn có thể tạo một hàm được lưu trữ bằng cách sử dụng cú pháp

USE username_test;
00

Cú pháp cơ bản để tạo một hàm trong MySQL như sau

USE username_test;
0

Trước tiên, bạn cần chỉ định tên của hàm trong

USE username_test;
01

Tiếp theo, bạn cần khai báo các tham số cần nhận cho hàm

Bạn có thể khai báo bao nhiêu tham số tùy thích, nhưng tốt nhất là một hàm nên có từ 0 đến 5 tham số. Quá nhiều tham số có thể làm bạn bối rối khi bảo trì chương trình sau này

Khi bạn có các tham số, hãy chỉ định loại dữ liệu được trả về bởi hàm bằng cách sử dụng từ khóa

USE username_test;
02

Bạn cũng cần chỉ định hàm là

USE username_test;
03 hay
USE username_test;
04 bên cạnh từ khóa
USE username_test;
02

USE username_test;
03 có nghĩa là hàm sẽ luôn trả về cùng một đầu ra cho cùng một đầu vào, cho phép MySQL tối ưu hóa việc thực thi hàm

Khi bạn không chắc chắn, chỉ cần chỉ định

USE username_test;
03 vì đó là mặc định mà MySQL sẽ sử dụng cho các chức năng

Cuối cùng, bạn cần chỉ định

USE username_test;
08 được hàm trả về bằng cách sử dụng từ khóa
USE username_test;
09

Đây là một hàm MySQL tương tự như hàm JavaScript ở trên

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
1

Khi bạn chạy câu lệnh trên, bạn có thể truy vấn hàm bằng câu lệnh

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
10 như sau

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
3

Tên hàm MySQL là duy nhất, có nghĩa là bạn chỉ có thể có một hàm với một tên nhất định

Chạy cú pháp

USE username_test;
00 hai lần sẽ gây ra
CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
12 ngay cả khi cùng một chức năng có các tham số khác nhau

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
6

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
7

Để sửa đổi một hàm hiện có, trước tiên bạn cần bỏ hàm đó bằng cú pháp

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
13, sau đó chạy lại cú pháp
USE username_test;
00

INSERT INTO products (prod_name, prod_cost, prod_price) VALUES ('Basic Widget',5.95,8.35),('Micro Widget',0.95,1.35),('Mega Widget',99.95,140.00);
0

Tạo một hàm MySQL với nhiều câu lệnh

Theo mặc định, một hàm MySQL chỉ có thể thực thi một câu lệnh

USE username_test;
09 trong phần thân của nó

Khi bạn cần chạy một quy trình phức tạp với nhiều câu lệnh SQL, thì bạn cần thêm mệnh đề

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
16 và câu lệnh ghép
CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
17 vào cú pháp
USE username_test;
00 của mình

Đây là một ví dụ về một hàm có nhiều câu lệnh

INSERT INTO products (prod_name, prod_cost, prod_price) VALUES ('Basic Widget',5.95,8.35),('Micro Widget',0.95,1.35),('Mega Widget',99.95,140.00);
5

Hàm

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
19 ở trên tính toán một
CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
30 tùy ý và trả về một
CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
31 khác dựa trên giá trị
CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
30

Khi giá trị là

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
33 hoặc thấp hơn, thì
CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
31 sẽ là
CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
35. Nếu không, nó sẽ là
CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
36

Vì hàm có nhiều câu lệnh nên dấu phân cách được thay đổi từ dấu chấm phẩy mặc định

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
37 thành dấu gạch chéo kép
CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
38 bằng cách sử dụng từ khóa
CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
16

Điều này cho phép bạn viết toàn bộ các câu lệnh

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
60,
CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
61 và
USE username_test;
09 ở trên bên trong câu lệnh
CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
17

Nếu không có câu lệnh

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
16 thì MySQL sẽ diễn giải lần lượt từng câu lệnh trên, gây ra lỗi

Đây là kết quả khi bạn thử truy vấn hàm bằng câu lệnh

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
10 như sau

SELECT *, calcProfit(prod_cost,prod_price) AS profit FROM products;
3

SELECT *, calcProfit(prod_cost,prod_price) AS profit FROM products;
4

Và đó là cách bạn có thể tạo một chức năng trong máy chủ cơ sở dữ liệu MySQL

Bằng cách lưu trữ một phần quy trình hoặc phép tính bên trong một hàm, bạn có thể thực hiện cùng một quy trình bao nhiêu lần tùy ý bằng cách gọi hàm như được hiển thị trong câu lệnh

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));
10 ở trên

Làm cách nào để thêm chức năng trong MySQL?

Có ba cách để thêm chức năng mới vào MySQL. .
Tạo một chức năng được lưu trữ (một loại đối tượng được lưu trữ). Một hàm được lưu trữ được viết bằng cách sử dụng các câu lệnh SQL thay vì biên dịch mã đối tượng. .
Tạo một hàm MySQL gốc (tích hợp sẵn). .
Sử dụng giao diện chức năng có thể tải

Có chức năng nào trong MySQL không?

MySQL có nhiều chức năng tích hợp sẵn . Tài liệu tham khảo này chứa chuỗi, số, ngày và một số chức năng nâng cao trong MySQL.

Làm cách nào để chạy một chức năng trong MySQL?

CHỨC NĂNG TẠO isodd(input_number int) RETURNS int BEGIN DECLARE v_isodd INT; . From the MySQL command line, we can invoke our simple stored function in a number of ways.

Làm cách nào để tạo một chức năng được lưu trữ trong MySQL?

Một hàm được lưu trữ trong MySQL là một tập hợp các câu lệnh SQL thực hiện một số tác vụ/thao tác và trả về một giá trị duy nhất. .
PHÂN BIỆT $$
TẠO CHỨC NĂNG fun_name(fun_parameter(s))
RETURNS kiểu dữ liệu
[KHÔNG] {Đặc điểm}
niềm_vui;