错误修改

在第一次使用自定义函数的时候,会提示一下错误信息。修改一下即可。重点需要修改log_bin_trust_function_creators = 1

  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)

修改方式

  1. SET GLOBAL log_bin_trust_function_creators = 1;

创建无传参函数

  1. # 创建无传参函数
  2. -- 定义函数名
  3. CREATE FUNCTION myDate()
  4. -- 定义返回类型
  5. RETURNS VARCHAR(30)
  6. -- 书写函数体
  7. RETURN DATE_FORMAT(NOW(),"%Y年%m月%d日 %H时%i分%秒");
  8. # 调用函数
  9. mysql> SELECT myDate();
  10. +---------------------------------+
  11. | myDate() |
  12. +---------------------------------+
  13. | 20200213 1419分秒 |
  14. +---------------------------------+

删除函数

IF EXISTS如果不确定这个函数在不在,可以加上。如果函数存在可不加。

  1. -- 不确定是否存在
  2. DPOP FUNCTION IF EXISTS 函数名
  3. -- 确定存在
  4. DPOP FUNCTION 函数名

创建带参函数

  1. -- 创建带参函数
  2. mysql> CREATE FUNCTION myAvg(num1 INT,num2 INT)
  3. -> RETURNS FLOAT(10,2)
  4. -> RETURN (num1 + num2 ) / 2;
  5. -- 调用函数
  6. mysql> SELECT myAvg(1,3);
  7. +------------+
  8. | myAvg(1,3) |
  9. +------------+
  10. | 2.00 |
  11. +------------+

创建复合结构函数体的函数

  1. CREATE FUNCTION add_name(n VARCHAR(20))
  2. RETURNS INT
  3. BEGIN
  4. INSERT user(name) VALUES(MD5(n));
  5. RETURN LAST_INSERT_ID();
  6. END;
  7. mysql> SELECT add_name('小明');
  8. +--------------------+
  9. | add_name('小明') |
  10. +--------------------+
  11. | 28 |
  12. +--------------------+
  1. 在这里遇到问题:`LAST-insert_id()`返回的是第一次修改的id值。根据上面函数每次操作玩都会返回一个不同的id,这是因为块级作用的问题吗?在外面单独执行的时候是OK的,返回的是第一次修改的ID值。