[MySQL光速入門]024 聊聊函數

函數(function)

和存儲過程很像, 提升代碼重用性, 簡化操做, 較少編譯次數mysql

區別在於sql

  • 存儲過程的返回值, 無關緊要, 可多可少
  • 函數的返回值, 有且只有一個

建立函數

create function 函數名(參數列表) returns 返回類型
begin
    函數體
end
複製代碼

注意: 參數列表包含兩部分, 參數名和參數類型數據庫

函數調用

還記得, 如何查看當前時間嗎?函數

select now();post

因此調用函數須要使用select測試

select 函數名(參數列表);
複製代碼

函數實例(無參數): 計算老師個數

測試數據ui

CREATE TABLE `teacher` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `salary` int(11) NOT NULL,
  `sex` tinyint(1) NOT NULL COMMENT '1 for male, 2 for female',
  `name` char(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


INSERT INTO `teacher`(`id`, `salary`, `sex`, `name`) VALUES (1, 1500, 1, '教師1');
INSERT INTO `teacher`(`id`, `salary`, `sex`, `name`) VALUES (2, 5500, 2, '教師2');
INSERT INTO `teacher`(`id`, `salary`, `sex`, `name`) VALUES (3, 6500, 2, '教師3');
INSERT INTO `teacher`(`id`, `salary`, `sex`, `name`) VALUES (4, 7500, 1, '教師4');
INSERT INTO `teacher`(`id`, `salary`, `sex`, `name`) VALUES (5, 8500, 2, '教師5');
複製代碼

建立並調用函數spa

drop function if exists 老師個數;
create function 老師個數() returns int begin 
    DECLARE 個數 int default 0;
    select count(*) into 個數 from teacher;
    return 個數;
end;

select 老師個數();
複製代碼

函數實例(有一個參數): 根據ID查看對應工資

drop function if exists 查看工資;
create function 查看工資(tid int) returns int begin 
    declare 老師工資 int default 0;
    select salary into 老師工資 from teacher where id = tid;
    return 老師工資;
end;

select 查看工資(2);
複製代碼

image.png

函數實例(兩個參數), 數字求和

drop FUNCTION if exists 數字求和;
create function 數字求和(數字1 int, 數字2 int) returns int begin 
    declare 結果 int;
    set 結果 = 數字1 + 數字2;
    return 結果;
end;
select 數字求和(1,1);
複製代碼

image.png

查看函數

image.png

mysql數據庫的proc表中, 保存了全部的函數3d

image.png

也能夠使用命令code

搜索函數(模糊查詢)

show function status like '老師%';
複製代碼

image.png

show create function 函數名 # 注意函數名不要加引號
複製代碼

image.png

刪除函數

drop function 函數名;
複製代碼

好比刪除老師個數函數

drop function 老師個數;
複製代碼

留點小做業

  1. 建立一個累加的函數, 兩個參數, 從第一個參數累加到第二個參數
mysql> select accumulation(1,100);
+---------------------+
| accumulation(1,100) |
+---------------------+
|                5050 |
+---------------------+
1 row in set (0.02 sec)

mysql> 
複製代碼
  1. 建立一個函數叫動物園, 每次調用, 隨機返回不一樣的動物
mysql> select zoo();
+--------+
| zoo()  |
+--------+
| 眼鏡蛇 |
+--------+
1 row in set (0.03 sec)

mysql> select zoo();
+--------+
| zoo()  |
+--------+
| 白頭鷹 |
+--------+
1 row in set (0.04 sec)

mysql> select zoo();
+-------+
| zoo() |
+-------+
| 河馬  |
+-------+
1 row in set (0.06 sec)

mysql> select zoo();
+-------+
| zoo() |
+-------+
| 隼    |
+-------+
1 row in set (0.07 sec)

mysql> select zoo();
+--------+
| zoo()  |
+--------+
| 白頭鷹 |
+--------+
1 row in set (0.09 sec)

mysql> select zoo();
+-------+
| zoo() |
+-------+
| 猩猩  |
+-------+
1 row in set (0.10 sec)

mysql> select zoo();
+-------+
| zoo() |
+-------+
| 鬣狗  |
+-------+
1 row in set (0.11 sec)

mysql> 
複製代碼

快速跳轉

相關文章
相關標籤/搜索