自定义函数(私人订制)
自定义函数 (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