MySQL存储结构用法案例分析
本文实例讲述了MySQL存储结构用法。分享给大家供大家参考,具体如下:
前言
今天公司老大让我做一个MySQL的调研工作,是关于MySQL的存储结构的使用。这里我会通过3个例子来介绍一下MySQL中存储结构的使用过程,以及一些需要注意的点。
笔者环境
系统:Windows7
MySQL:MySQL5.0.96
准备工作
1.新建两张数据表:student1,student2
新建student1
DROPTABLEIFEXISTSstudent1; CREATETABLEstudent1( idINTNOTNULLauto_increment, nameTEXT, ageINT, PRIMARYKEY(id) );
新建student2
DROPTABLEIFEXISTSstudent2; CREATETABLEstudent2( idINTNOTNULLauto_increment, nameTEXT, ageINT, PRIMARYKEY(id) );
2.向student1中新增数据
INSERTINTOstudent1(name,age)VALUES('xiaoming',18); INSERTINTOstudent1(name,age)VALUES('xiaohong',17); INSERTINTOstudent1(name,age)VALUES('xiaogang',19); INSERTINTOstudent1(name,age)VALUES('xiaoyu',18); INSERTINTOstudent1(name,age)VALUES('xiaohua',20);
实现功能说明
1.打印student1中的部分信息
2.把student1中的部分数据复制到student2中
3.传入参数作为限制条件,把student1中的部分数据复制到student2中
注意事项
在编写存储结构的时候,我们不能以分号(;)结束。因为我们的SQL语句就是以分号(;)结尾的。这里我们要修改一下存储结构的结束符号(&&)。
这里我们使用MySQL中的DELIMITER进行修改,并在存储结构创建完毕时,再改为分号(;)结束即可。
关于这一点在后面的例子中有所体现。在编写MySQL的触发器中,也会用到类似的情况。
使用方式
1.打印student1中的部分信息
--------------------------------------------------------------- DROPPROCEDUREIFEXISTStest_pro1; --------------------------------------------------------------- DELIMITER&& CREATEPROCEDUREtest_pro1() BEGIN set@sentence='select*fromstudent1whereage<19;'; preparestmtfrom@sentence; executestmt; deallocatepreparestmt; END&& DELIMITER;
2.复制表存储过程的编写(不带参数)
--------------------------------------------------------------- DROPPROCEDUREIFEXISTStest_pro2; --------------------------------------------------------------- DELIMITER&& createproceduretest_pro2() begin DECLAREstop_flagINTDEFAULT0; DECLAREs_nameTEXTdefault''; DECLAREs_ageINTdefault0; DECLAREcur1CURSORFOR(selectname,agefromstudent1whereage<19); DECLARECONTINUEHANDLERFORSQLSTATE'02000'SETstop_flag=1; opencur1; fetchcur1intos_name,s_age; whilestop_flag<>1DO insertintostudent2(name,age)values(s_name,s_age); fetchcur1intos_name,s_age; endwhile; closecur1; end&& DELIMITER;
3.复制表存储过程的编写(带参数)
--------------------------------------------------------------- DROPPROCEDUREIFEXISTStest_pro3; --------------------------------------------------------------- DELIMITER&& createproceduretest_pro3(INp_ageINT) begin DECLAREstop_flagINTDEFAULT0; DECLAREs_nameTEXTdefault''; DECLAREs_ageINTdefault0; DECLAREcur1CURSORFOR(selectname,agefromstudent1whereage1DO insertintostudent2(name,age)values(s_name,s_age); fetchcur1intos_name,s_age; endwhile; closecur1; end&& DELIMITER;
这里的SQLSTATE'02000'和NOTFOUND系统返回值是一样的。
4.使用方式
calltest_pro1();
or
calltest_pro1(123);
更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL存储过程技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》及《MySQL数据库锁相关技巧汇总》
希望本文所述对大家MySQL数据库计有所帮助。