子沐课堂——Mysq从入门到精通(三)

自定义函数(私人订制)

自定义函数 (user-defined function UDF)就是用一个象ABS() 或 CONCAT()这样的固有(内建)函数一样作用的新函数去扩展MySQL。

所以UDF是对MySQL功能的一个扩展

语法

CREATE [AGGREGATE] FUNCTION function_name(parameter_name type,[parameter_name type,...])

RETURNS {STRING|INTEGER|REAL}

runtime_body

2.函数主体

a.如果只有一行语句

create function <function_name>(arg1,agr2)

RETURNS <数据类型>

return <执行语句>

b.如果是多行语句

create function <function_name>(arg1,agr2)

RETURNS <数据类型>

Begin

<执行语句>

....

return <执行语句>

End

3.案例

create function get_username_by_id(uid int)

returns varchar(50)

return (select UserName from author where Id=uid);

select function get_username_by_id(2)

4.返回表(Sql server支持,mysql支持,只支持单字段)

存储过程(函数的升级版本)

1.in out inout

in 传入参数

out 传出参数

inout 传入传出参数

2.语法

create procedure <procedure_name>(in arg1 类型,...)

begin

end

3.案例

create procedure pro4(in cname varchar(50),out new_id int)

begin

insert into cities (`name`,`CreateDate`,`author_num`) values (cname,now(),0)

触发地点:表

执行事件:执行的sql语句

(b)结构

create trigger <trigger_name>

before/after insert/update/delete on <table_name>

for each row(触发器的执行间隔,每隔一行执行一次动作)

Begin

<执行sql语句>

end

(2)案例

(a)分类表中删除一条记录,则从子表中,将对应的分类id制空

create trigger tri_del_label

before delete on label

for each row

begin

update csdn set label_id=NULL where label_id=old.id

end

delete from label where id=5;

(b)分类表中更新一条记录,则从子表中,将对应的分类id更新为新的id

create trigger tri_updaye_label

after update on label

for each row

begin

update csdn set label_id=new.id where label_id=old.id

end

update label set label_id=999 where label_id=5;

(c)银行存入一笔存款(交易记录表,order),个人信息表(info)中的余额增加

order

id,num,type,uid

info

id,username,number

create trigger tri_insert_oreder

after insert on order

for each row

begin

if new.type=1 then

update info set number=number+new.num where id=new.uid

else

update info set number=number-new.num where id=new.uid

end if;

end

视图:view

create view view_name

as <sql语句>;

详细资料,请加群获取:586656942

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子沐老司

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值