Amazon 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值