11.子程序的高级特性2

来源:网易云课堂《精通MySQL存储过程、函数和触发器》课程

讲师:huangxifeng607(黄锡峰)


笔记:

(1)函数的只读高级特性


delimiter $$
create function testa() returns int
reads sql data
begin
	declare my_uid int;
	select uid into my_uid from hxf where salary<3000 limit 1;
	return my_uid;
end;
$$
delimiter;

1.提供子程序使用数据的内在信息

reads sql data只包含读的sql语句,说明只有读,没有更新,对复制精确性是安全的,则可以放行


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


delimiter $$
create function testa()
contains sql -> reads sql data
begin
	update user set level=5 where uid=5;
	return 5;
end;
$$
delimiter;


如果函数包含了更新语句,指定为contains sql, modifies sql data等写的高级特性是不允许创建的。

包含更新语句的函数可以指定为no sql, 或者reads sql data只读特性,才可以放行创建,复制可以正常进行


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


delimiter $$
create function testa() returns int
modifies sql data
begin
	update user set level=50 where uid=5;
	return 5;
end;
$$
delimiter;


如果函数包含了更新语句,指定为contains sql, modifies sql data, 并且允许创建,有两个方案:

修改log_bin_trust_function_creators=1(从库也要修改),

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值