12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
mysql数据库 时间:2024-12-25 09:56:45
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
视图
视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,并可以将其当作表来使用。
创建视图:
create
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
视图
视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,并可以将其当作表来使用。
创建视图:
createviewv1asselect*fromstudentwhereid>100;
今后可以直接通过:
select*fromv1;#直接访问学生ID大于100的信息
删除视图:
dropviewv1;
修改视图:
alterviewv1asselectid,namefromstudentwhereid<10andname=dandan;
注意:使用视图时,将其当作表进行操作即可,由于视图是虚拟表,所以使用其对真实表进行创建、更新和删除操作,仅能做查询用。
触发器
对某个表进行【增/删/改】操作的前后如果希望触发某个特定的行为时,可以使用触发器,触发器用于定制用户对表的行进行【增/删/改】前后的行为。
创建触发器:
delimiter//createtriggertg_before_insert_studentbeforeinsertonstudentforeachrowbeginifnew.name=='alex'theninsertintostudent_back(name)values('alex_back');end//delimiter;
也可以用 after insert 表示插入之后执行触发器中语句,还有其他操作:before update、after update、before delete 、after delete
注意:NEW表示即将插入的数据行,OLD表示即将删除的数据行
删除触发器:drop tgigger tg_before_insert_student
触发器无法由用户直接调用,而知由于对表的【增/删/改】操作被动引发的。
存储过程
存储过程是一个SQL语句集合,当主动去调用存储过程时,其中内部的SQL语句会按照逻辑执行。
--创建存储过程delimiter//createprocedurep1()BEGINselect*fromt1;END//delimiter;--执行存储过程callp1()
对于存储过程,可以接受参数,其参数类型有三类:
in 只用于传入参数
out 用于返回值
inout 即可以传入又可以当作返回值
有参数的存储过程:
--创建存储过程delimiter\\createprocedurep1(ini1int,ini2int,inouti3int,outr1int)BEGINDECLAREtemp1int;DECLAREtemp2intdefault0;settemp1=1;setr1=i1+i2+temp1+temp2;seti3=i3+100;end\\delimiter;--执行存储过程set@t1=4;set@t2=0;CALLp1(1,2,@t1,@t2);SELECT@t1,@t2;
结果集加返回值:
delimiter//createprocedurep2(inn1int,inoutn3int,outn2int,)begindeclaretemp1int;declaretemp2intdefault0;select*fromv1;setn2=n1+100;setn3=n3+n1+100;end//delimiter;
事务型存储过程:
delimiter\\createPROCEDUREp1(OUTp_return_codetinyint)BEGINDECLAREexithandlerforsqlexceptionBEGIN--ERRORsetp_return_code=1;rollback;END;DECLAREexithandlerforsqlwarningBEGIN--WARNINGsetp_return_code=2;rollback;END;STARTTRANSACTION;DELETEfromtb1;insertintotb2(name)values('seven');COMMIT;--SUCCESSsetp_return_code=0;END\\delimiter;
游标:
delimiter//createprocedurep3()begindeclaressidint;--自定义变量1declaressnamevarchar(50);--自定义变量2DECLAREdoneINTDEFAULTFALSE;DECLAREmy_cursorCURSORFORselectsid,snamefromstudent;DECLARECONTINUEHANDLERFORNOTFOUNDSETdone=TRUE;openmy_cursor;xxoo:LOOPfetchmy_cursorintossid,ssname;ifdonethenleavexxoo;ENDIF;insertintoteacher(tname)values(ssname);endloopxxoo;closemy_cursor;end//delimter;
动态执行SQL:
delimiter\\CREATEPROCEDUREp4(innidint)BEGINPREPAREprodFROM'select*fromstudentwheresid>?';EXECUTEprodUSING@nid;DEALLOCATEprepareprod;END\\delimiter;
删除存储过程:drop procedure proc_name;
执行存储过程:
--无参数callproc_name()--有参数,全incallproc_name(1,2)--有参数,有in,out,inoutset@t1=0;set@t2=3;callproc_name(1,2,@t1,@t2)
函数
MySql中的函数分为:内置函数、自定义函数
内置函数参考:
http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/functions.html#encryption-functions
自定义函数:
delimiter\\createfunctionf1(i1int,i2int)returnsintBEGINdeclarenumint;setnum=i1+i2;return(num);END\\delimiter;
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19