• 售前

  • 售后

热门帖子
入门百科

MySQL存储布局用法案例分析

[复制链接]
晴朗71 显示全部楼层 发表于 2021-10-26 13:51:39 |阅读模式 打印 上一主题 下一主题
本文实例报告了MySQL存储布局用法。分享给大家供大家参考,详细如下:
前言
今天公司老大让我做一个MySQL的调研工作,是关于MySQL的存储布局的使用。这里我会通过3个例子来先容一下MySQL中存储布局的使用过程,以及一些必要注意的点。
笔者环境
系统:Windows 7
MySQL:MySQL 5.0.96
预备工作
1.新建两张数据表:student1, student2
新建student1
  1. DROP TABLE IF EXISTS student1;
  2. CREATE TABLE student1 (
  3. id INT NOT NULL auto_increment,
  4. name TEXT,
  5. age INT,
  6. PRIMARY KEY(id)
  7. );
复制代码
新建student2
  1. DROP TABLE IF EXISTS student2;
  2. CREATE TABLE student2 (
  3. id INT NOT NULL auto_increment,
  4. name TEXT,
  5. age INT,
  6. PRIMARY KEY(id)
  7. );
复制代码
2.向student1中新增数据
  1. INSERT INTO student1 (name, age) VALUES ('xiaoming', 18);
  2. INSERT INTO student1 (name, age) VALUES ('xiaohong', 17);
  3. INSERT INTO student1 (name, age) VALUES ('xiaogang', 19);
  4. INSERT INTO student1 (name, age) VALUES ('xiaoyu', 18);
  5. INSERT INTO student1 (name, age) VALUES ('xiaohua', 20);
复制代码
实现功能说明
1.打印student1中的部分信息
2.把student1中的部分数据复制到student2中
3.传入参数作为限定条件,把student1中的部分数据复制到student2中
注意事项
在编写存储布局的时间,我们不能以分号(;)结束。由于我们的SQL语句就是以分号(;)结尾的。这里我们要修改一下存储布局的结束符号(&&)。
这里我们使用MySQL中的DELIMITER举行修改,并在存储布局创建完毕时,再改为分号(;)结束即可。
关于这一点在背面的例子中有所体现。在编写MySQL的触发器中,也会用到类似的环境。
使用方式
1.打印student1中的部分信息
  1. ---------------------------------------------------------------
  2. DROP PROCEDURE IF EXISTS test_pro1;
  3. ---------------------------------------------------------------
  4. DELIMITER &&
  5. CREATE PROCEDURE test_pro1()
  6. BEGIN
  7. set @sentence = 'select * from student1 where age<19;';
  8. prepare stmt from @sentence;
  9. execute stmt;
  10. deallocate prepare stmt;
  11. END &&
  12. DELIMITER ;
复制代码
2.复制表存储过程的编写(不带参数)
  1. ---------------------------------------------------------------
  2. DROP PROCEDURE IF EXISTS test_pro2;
  3. ---------------------------------------------------------------
  4. DELIMITER &&
  5. create procedure test_pro2()
  6. begin
  7.   DECLARE stop_flag INT DEFAULT 0;
  8.   DECLARE s_name TEXT default '';
  9.   DECLARE s_age INT default 0;
  10.   DECLARE cur1 CURSOR FOR (select name, age from student1 where age<19);
  11.     DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET stop_flag=1;
  12.   open cur1;
  13.     fetch cur1 into s_name, s_age;
  14.   while stop_flag<>1 DO
  15.     insert into student2(name, age) values(s_name, s_age);
  16.     fetch cur1 into s_name, s_age;
  17.   end while;
  18.   close cur1;
  19. end &&
  20. DELIMITER ;
复制代码
3.复制表存储过程的编写(带参数)
  1. ---------------------------------------------------------------
  2. DROP PROCEDURE IF EXISTS test_pro3;
  3. ---------------------------------------------------------------
  4. DELIMITER &&
  5. create procedure test_pro3(IN p_age INT)
  6. begin
  7.   DECLARE stop_flag INT DEFAULT 0;
  8.   DECLARE s_name TEXT default '';
  9.   DECLARE s_age INT default 0;
  10.   DECLARE cur1 CURSOR FOR (select name, age from student1 where age<p_age);
  11.     DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET stop_flag=1;
  12.   open cur1;
  13.     fetch cur1 into s_name, s_age;
  14.   while stop_flag<>1 DO
  15.     insert into student2(name, age) values(s_name, s_age);
  16.     fetch cur1 into s_name, s_age;
  17.   end while;
  18.   close cur1;
  19. end &&
  20. DELIMITER ;
复制代码
这里的SQLSTATE '02000'和NOT FOUND系统返回值是一样的。
4.使用方式
  1. call test_pro1();
复制代码
or
  1. call test_pro1(123);
复制代码
更多关于MySQL相干内容感爱好的读者可检察本站专题:《MySQL存储过程本领大全》、《MySQL常用函数大汇总》、《MySQL日志操纵本领大全》、《MySQL事件操纵本领汇总》及《MySQL数据库锁相干本领汇总》
渴望本文所述对大家MySQL数据库计有所资助。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作