和存儲過程很像, 提升代碼重用性, 簡化操做, 較少編譯次數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 老師個數();
複製代碼
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);
複製代碼
drop FUNCTION if exists 數字求和;
create function 數字求和(數字1 int, 數字2 int) returns int begin
declare 結果 int;
set 結果 = 數字1 + 數字2;
return 結果;
end;
select 數字求和(1,1);
複製代碼
在mysql
數據庫的proc
表中, 保存了全部的函數3d
也能夠使用命令code
show function status like '老師%';
複製代碼
show create function 函數名 # 注意函數名不要加引號
複製代碼
drop function 函數名;
複製代碼
好比刪除老師個數
函數
drop function 老師個數;
複製代碼
mysql> select accumulation(1,100);
+---------------------+
| accumulation(1,100) |
+---------------------+
| 5050 |
+---------------------+
1 row in set (0.02 sec)
mysql>
複製代碼
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>
複製代碼