错误修改
在第一次使用自定义函数的时候,会提示一下错误信息。修改一下即可。重点需要修改
log_bin_trust_function_creators = 1
ERROR 1418 (HY000): 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)
修改方式
SET GLOBAL log_bin_trust_function_creators = 1;
创建无传参函数
# 创建无传参函数-- 定义函数名CREATE FUNCTION myDate()-- 定义返回类型RETURNS VARCHAR(30)-- 书写函数体RETURN DATE_FORMAT(NOW(),"%Y年%m月%d日 %H时%i分%秒");# 调用函数mysql> SELECT myDate();+---------------------------------+| myDate() |+---------------------------------+| 2020年02月13日 14时19分秒 |+---------------------------------+
删除函数
IF EXISTS如果不确定这个函数在不在,可以加上。如果函数存在可不加。
-- 不确定是否存在DPOP FUNCTION IF EXISTS 函数名-- 确定存在DPOP FUNCTION 函数名
创建带参函数
-- 创建带参函数mysql> CREATE FUNCTION myAvg(num1 INT,num2 INT)-> RETURNS FLOAT(10,2)-> RETURN (num1 + num2 ) / 2;-- 调用函数mysql> SELECT myAvg(1,3);+------------+| myAvg(1,3) |+------------+| 2.00 |+------------+
创建复合结构函数体的函数
CREATE FUNCTION add_name(n VARCHAR(20))RETURNS INTBEGININSERT user(name) VALUES(MD5(n));RETURN LAST_INSERT_ID();END;mysql> SELECT add_name('小明');+--------------------+| add_name('小明') |+--------------------+| 28 |+--------------------+
在这里遇到问题:`LAST-insert_id()`返回的是第一次修改的id值。根据上面函数每次操作玩都会返回一个不同的id,这是因为块级作用的问题吗?在外面单独执行的时候是OK的,返回的是第一次修改的ID值。
