目录
1.语法
create function 函数名([参数列表]) returns 数据类型
begin
sql语句;
return 值;
end;
2.示例
2.1 举例
创建一个现实时间的函数:
create function show_time()
returns varchar(30)
return date_format(now(), ‘%Y年%m月%d日 %H时%i分%s秒’);
创建一个通过id获取姓名的函数:
DELIMITER //
CREATE FUNCTION get_number_by_id(id INT)
RETURNS VARCHAR(300)
BEGIN
RETURN (SELECT CONCAT('name: ', name, '--', 'number: ', number)
FROM users_info WHERE uid = id);
END//
DELIMITER ;
其中DELIMITER 先定义结束符为 // , 然后又将结束符改为mysql默认的分号结束符。
了解delimiter 关键字请点击:
MySQL中 delimiter 关键字详解
2.2 报错
如果创建自定义函数时遇到下面这种报错:
Error Code : 1418 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)
原因分析:
导致该错误的原因可能是一个安全设置方面的配置,查手册log_bin_trust_function_creators参数缺省0,是不允许function的同步的,一般我们在配置repliaction的时候,都忘记关注这个参数,这样在master更新funtion后,slave就会报告错误,然后slave stoped。
解决办法可以参考这里:
MySQL ERROR 1418 的解决方法
3.练习
3.1 练习数据库及表创建
MySQL版本:8.0.20
-- 如果已有该数据库,则删除
DROP DATABASE IF EXISTS StudentScore;
-- 创建数据库
CREATE DATABASE StudentScore CHARSET=UTF8;
-- 使用数据库
USE StudentScore;
-- 创建数据表
-- table 1: students
DROP TABLE IF EXISTS students;
CREATE TABLE students(
sid INT(20) UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
sname VARCHAR(20),
sclass INT(10),
sgender VARCHAR(10),
smajor VARCHAR(20),
sbirthday DATE
);
-- table 2: teachers
DROP TABLE IF EXISTS teachers;
CREATE TABLE teachers(
tid INT(