mysql子程序的高级特性(二)

1.函数的只读高级特性

DELIMITER $$

CREATE FUNCTION test_1() RETURNS VARCHAR(111)
READS SQL DATA
BEGIN
	DECLARE result VARCHAR(111) DEFAULT '';
	SELECT NAME INTO result FROM test_score WHERE id < 20 LIMIT 1;
	RETURN result;
END$$

DELIMITER ;

提供子程序使用数据的内在信息
    READS SQL DATA只包含读的SQL语句,说明只有读,没有更新,对复制精确性是安全的,则可以放行

 

2.函数包含可更新语句的高级特性

如果函数包含了更新语句,指定为CONTAINS SQL , MODIFIES SQL DATA等写的高级特性是不允许被创建的

包含更新语句的函数可以指定为NO SQL或READS SQL DATA只读特性,才可以方向创建,复制可以正常进行

3.函数包含可更新语句对复制的影响 

如果函数包含了更新语句,指定为CONTAINS SQL, MODIFIES SQL DATA, 并且允许创建,有两个方案:
1.修改log_bin_trust_function_creators=1
2.关闭binlog日志

对复制的影响:这种更新记录二进制日志,也能正常复制

 4.函数的高级特性特点

1.提供了函数使用数据的内在信息
    CONTAINS SQL    包含读写语句
    NO SQL    无SQL语句(只读)
    READS SQL DATA 只读的SQL语句
    MODIFIES SQL DATA 只写的SQL语句

2.函数的设计原则上不允许更新,历史上函数更新对复制可能是不安全的
    二进制不会记录select语句,但只有函数中有更新语句时例外

3.如果包含了更新语句,指定为CONTAINS SQL 或 MODIFIES SQL DATA是不允许创建的。
  但可以指定为NO SQL或者READS SQL DATA只读特性,才可以放行创建,复制可以正常进行。

4.如果函数包含了更新语句,指定为CONTAINS SQL,MODIFIES SQL DATA写的高级特性,并且允许创建,有两个方案:
    修改log_bin_trust_function_creators=1
    或    
    关闭binlog日志
    但对数据复制可能是不安全的

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值