Amazon RDS 创建自定义函数

文章目录

  • 需求
  • 现象
    • 问题一
    • 问题二
    • 问题三
  • 解决方法
    • 问题一
    • 问题二
    • 问题三
  • 执行流程
    • 查看并修改RDS参数组参数值为1,再次查看RDS参数
    • 切换数据库,执行创建自定义函数命令
  • 参考文档

需求

在Amazon RDS Mysql兼容数据库创建自定义函数

现象

执行创建命令时,出现了如下几个报错

问题一

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

问题二

ERROR 1046 (3D000): No database selected

问题三

ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

解决方法

问题一

报错 1064 42000 是指 SQL 语法错误,可能是由于示例代码中的语法不正确或数据库类型不匹配导致的。对于MySQL函数,您需要在创建函数之前将DELIMITER设置为自定义的分隔符,以避免在函数体中使用的分号(;)与外部的分号冲突。创建函数后,再将分隔符恢复为默认的分号。

问题二

这个报错是因为在创建函数时没有选择数据库。在 MySQL 中,您必须在创建函数之前明确指定要在哪个数据库中创建该函数。报错信息 "No database selected" 意味着您在执行创建函数的命令之前没有选择要创建函数的数据库。

问题三

该错误提示表明您没有 SUPER 权限,并且二进制日志记录(binary logging)是启用的。在启用二进制日志记录的情况下,要创建带有非确定性结果的函数(例如自增函数),需要 SUPER 权限。解决方法:SET GLOBAL log_bin_trust_function_creators = 1;

执行流程

`## 查看当前RDS参数
mysql> SHOW VARIABLES LIKE ‘log_bin_trust_function_creators’;
±--------------------------------±------+
| Variable_name | Value |
±--------------------------------±------+
| log_bin_trust_function_creators | OFF |
±--------------------------------±------+

查看并修改RDS参数组参数值为1,再次查看RDS参数

mysql> SHOW VARIABLES LIKE ‘log_bin_trust_function_creators’;
±--------------------------------±------+
| Variable_name | Value |
±--------------------------------±------+
| log_bin_trust_function_creators | ON |
±--------------------------------±------+

切换数据库,执行创建自定义函数命令

Database changed
mysql> DELIMITER //
mysql> CREATE FUNCTION DecryptData(encryptedData VARCHAR(3000))
    -> RETURNS VARCHAR(1024)
    -> READS SQL DATA
    -> BEGIN
    ->  <函数体>
    -> END //
Query OK, 0 rows affected (0.02 sec)
mysql> DELIMITER ;
mysql> drop database op_test;
Query OK, 0 rows affected (0.01 sec)
  • PS :Amazon RDS 需要修改参数组,动态参数直接生效,静态参数则需要重启实例。更换参数组也需要重启实例。

参考文档

参考文档1
参考文档2

你可能感兴趣的:(EKS,数据库,aws)