前言

今天公司老大让我做一个MySQL的调研工作,是关于MySQL的存储结构的使用。这里我会通过3个样例来介绍一下MySQL中存储结构的使用过程,以及一些须要注意的点。

笔者环境

系统:Windows 7

MySQL:MySQL 5.0.96

准备工作

1.新建两张数据表:student1, student2

新建student1

DROP TABLE IF EXISTS student1;
CREATE TABLE student1 (
id INT NOT NULL auto_increment,
name TEXT,
age INT,
PRIMARY KEY(id)
);

新建student2

DROP TABLE IF EXISTS student2;
CREATE TABLE student2 (
id INT NOT NULL auto_increment,
name TEXT,
age INT,
PRIMARY KEY(id)
);

2.向student1中新增数据

INSERT INTO student1 (name, age) VALUES ('xiaoming', 18);
INSERT INTO student1 (name, age) VALUES ('xiaohong', 17);
INSERT INTO student1 (name, age) VALUES ('xiaogang', 19);
INSERT INTO student1 (name, age) VALUES ('xiaoyu', 18);
INSERT INTO student1 (name, age) VALUES ('xiaohua', 20);

实现功能说明

1.打印student1中的部分信息
2.把student1中的部分数据拷贝到student2中
3.传入參数作为限制条件,把student1中的部分数据拷贝到student2中

注意事项

在编写存储结构的时候。我们不能以分号(;)结束。由于我们的SQL语句就是以分号(;)结尾的。这里我们要改动一下存储结构的结束符号(&&)。

这里我们使用MySQL中的DELIMITER进行改动,并在存储结构创建完成时,再改为分号(;)结束就可以。

关于这一点在后面的样例中有所体现。在编写MySQL的触发器中,也会用到相似的情况。

使用方式

1.打印student1中的部分信息

---------------------------------------------------------------
DROP PROCEDURE IF EXISTS test_pro1;
---------------------------------------------------------------
DELIMITER &&
CREATE PROCEDURE test_pro1()
BEGIN
set @sentence = 'select * from student1 where age<19;';
prepare stmt from @sentence;
execute stmt;
deallocate prepare stmt;
END &&
DELIMITER ; 

2.复制表存储过程的编写(不带參数)

---------------------------------------------------------------
DROP PROCEDURE IF EXISTS test_pro2;
---------------------------------------------------------------
DELIMITER &&
create procedure test_pro2()
begin
DECLARE stop_flag INT DEFAULT 0;
DECLARE s_name TEXT default '';
DECLARE s_age INT default 0; DECLARE cur1 CURSOR FOR (select name, age from student1 where age<19);
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET stop_flag=1;
open cur1;
fetch cur1 into s_name, s_age;
while stop_flag<>1 DO
insert into student2(name, age) values(s_name, s_age);
fetch cur1 into s_name, s_age;
end while;
close cur1;
end &&
DELIMITER ;

3.复制表存储过程的编写(带參数)

---------------------------------------------------------------
DROP PROCEDURE IF EXISTS test_pro3;
---------------------------------------------------------------
DELIMITER &&
create procedure test_pro3(IN p_age INT)
begin
DECLARE stop_flag INT DEFAULT 0;
DECLARE s_name TEXT default '';
DECLARE s_age INT default 0; DECLARE cur1 CURSOR FOR (select name, age from student1 where age<p_age);
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET stop_flag=1;
open cur1;
fetch cur1 into s_name, s_age;
while stop_flag<>1 DO
insert into student2(name, age) values(s_name, s_age);
fetch cur1 into s_name, s_age;
end while;
close cur1;
end &&
DELIMITER ;

这里的SQLSTATE '02000'和NOT FOUND系统返回值是一样的。

4.使用方式

call test_pro1();
or
call test_pro1(123);

最新文章

  1. Node.js 究竟是什么?
  2. 客户端连接linux经常间隔性断开链接
  3. Android Debugging
  4. Linux下smba服务端的搭建和客户端的使用
  5. Ubuntu开发环境搭建
  6. 选择下拉列表最大索引值 Select From List By Max Index
  7. (原创)win7自带IIS7.5+php7.0.10安装教程(图)
  8. 树莓PI安装web服务器
  9. Polyfills
  10. JSP简单标签标签库开发
  11. 201521123066 《Java程序设计》第十一周学习总结
  12. 使用fiddler轻轻松松制造客户端接口time out的情况
  13. Android Studio waiting for debugger 卡死
  14. 【4】 .net MVC使用Session验证用户登录
  15. apiCloud app调用浏览器打开网页的方法
  16. 〖Linux〗clang3.4的编译与安装
  17. iOS-封装UIPickerView
  18. 002servlet生命周期以及有关servlet的各种知识
  19. 【转】Spring Boot 日志配置(超详细)
  20. PHP获取当前文件路径

热门文章

  1. 关于Error:Maven&#160;Resources&#160;Compiler:&#160;Maven&#160;project&#160;configuration&#160;required&#160;for&#160;module&#160;&#39;项目名&#39;&#160;isn&#39;t&#160;available.&#160;Compilation&#160;of&#160;Maven&#160;projects&#160;is&#160;supported&#160;only&
  2. SQL Server连接不上本地服务器
  3. 怎么给xshell服务配置密钥远程登陆
  4. 如何用纯 CSS 创作一个荧光脉冲 loader 特效
  5. php S3
  6. elasticsearch 中文 term &amp; completion suggester
  7. POJ 3259 Wormholes(负权环路)
  8. Java基础学习总结(90)——Java单元测试技巧
  9. Jquery跨域请求
  10. Codeforces Round #387 (Div. 2) A+B+C+D!