MySQL创建自定义函数教程

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(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值