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日志
但对数据复制可能是不安全的