mysql 存储过程入门练习——循环创建相同结构的表
背景描述:有很应用中会有多张同结构的表,如果单纯的一个创建或是拷贝、粘贴+更改;也可以完成,表多了总是很痛苦,看了网上的资料,自己动手写了一个练习,呵呵跑通了滴;
目前是学会了使用,但部分为何这样用还不是特别懂,先上跑通的例子再说;
PART1:如何循环创建相同结构的表
mysql> use procduretest
Database changed
mysql> show tables;
-> //;
+------------------------+
| Tables_in_procduretest |
+------------------------+
| cf_file_1 |
| cf_file_2 |
| cf_file_3 |
| cf_file_4 |
| cf_file_5 |
| test_file |
+------------------------+
6 rows in set (0.00 sec)
mysql> delimiter //
mysql> create procedure test1()
-> begin
-> declare aa varchar(256);
-> declare bb varchar(256);
-> declare i int default 1;
-> declare count int default 5;
-> while i<=5 do
-> set aa=CONCAT('cf_file22_',i);
-> set @tfile= CONCAT(' create table ',aa ,' like
-> prepare stmt from @tfile;
-> execute stmt;
-> set i=i+1;
-> end while;
->
-> while i<=5 do
-> set bb=CONCAT('cf_folder_',i);
-> set @tfolder= CONCAT(' create table ',aa ,' li
-> prepare stmt from @tfolder;
-> execute stmt;
-> set i=i+1;
-> end while;
-> end
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> call test1()//;
Query OK, 0 rows affected (0.20 sec)
mysql> show tables;
-> //
+------------------------+
| Tables_in_procduretest |
+------------------------+
| cf_file22_1 |
| cf_file22_2 |
| cf_file22_3 |
| cf_file22_4 |
| cf_file22_5 |
| cf_file2_1 |
| cf_file_1 |
| cf_file_2 |
| cf_file_3 |
| cf_file_4 |
| cf_file_5 |
| test_file |
+------------------------+
12 rows in set (0.00 sec)
mysql>
PART2:为何要这么用呢?
1、为何要将全sql作为变量?
答:
用变量做表名,如果简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名。在其他的sql数据库中也是如此,mssql的解决方法是将整条sql语句作为变量,其中穿插变量作为表名,
2、如何在存储过程中执行sql语句:
SET @update_stmt='' /*在单引号中间填入要执行的sql语句*/
PREPARE stmt FROM @update_stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
PREPARE是mysql的预处理语句,基本语法如下:
MySQL prepare语法:
PREPARE statement_name FROM preparable_SQL_statement; /*定义*/
EXECUTE statement_name [USING @var_name [, @var_name] ...]; /*执行预处理语句*/
{DEALLOCATE | DROP} PREPARE statement_name /*删除定义*/ ;
PREPARE语句用于预备一个语句,并指定名称statement_name,以后引用该语句。语句名称对大小写不敏感。
preparable_SQL_statement可以是一个文字字符串,也可以是一个包含了语句文本的用户变量。
该文本必须表现为一个单一的SQL语句,而不是多个语句。在这语句里,‘?’字符可以被用于标识参数,当执行时,以指示数据值绑定到查询后。‘?’字符不应加引号,即使你想要把它们与字符串值结合在一起。参数标记只能用于数据值应该出现的地方,而不是SQL关键字,标识符,等等。
如果预语句已经存在,则在新的预语句被定义前,它会被隐含地删掉。
举个PREPARE直接跟sql语句的例子:
mysql> prepare md5sum from 'select md5(?) AS md5sum';
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> set @a=111;
Query OK, 0 rows affected (0.00 sec)
mysql> set @b=222;
Query OK, 0 rows affected (0.00 sec)
mysql> execute md5sum using @a;
3、为何prepare中用到的sql语句必须是用户变量呢?
如果将以上存储过程中的@tfile改为aa则会出错? 学习中,暂时无解;
附:mysql变量详解 http://hi.baidu.com/%CA%E6%B7%F4%BC%D1%B2%C5%CA%C7%CD%F5%B5%C0/blog/item/65b93f359efbe9afd1a2d3f5.html
分享到:
相关推荐
MySQL存储过程,入门简单,循序渐进,很适合自学,很详尽,很好学。
存储过程简单入门学习,文章中举实例学习,让你轻松入门
mysql存储过程实例讲解。通俗易懂。mysql存储过程入门必备哦~
完整版 MySQL8.0从入门到精通 MySQL数据库教程 第21章 精通MySQL存储引擎(共31页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第22章 PHP操作MySQL数据库(共16页).ppt 完整版 MySQL8.0从入门到精通 MySQL...
mysql的存储过程、触发器详细教程,适合入门
完整版 MySQL8.0从入门到精通 MySQL数据库教程 第21章 精通MySQL存储引擎(共31页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第22章 PHP操作MySQL数据库(共16页).ppt 完整版 MySQL8.0从入门到精通 MySQL...
MySQL课程之MySQL存储引擎入门 MySQL 支持多种存储引擎,目前的存储引擎有 MyISAM 、 InnoDB 、 BDB 、 Memory 、 Merge 、 Archive 、 Federated 、 BLACKHOLE 、 Cluster/NDB 、 CSV 、 Example 等。其中, InnoDB...
完整版 MySQL8.0从入门到精通 MySQL数据库教程 第21章 精通MySQL存储引擎(共31页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第22章 PHP操作MySQL数据库(共16页).ppt 完整版 MySQL8.0从入门到精通 MySQL...
第09章 索引(共11页).pptMySQL从入门到精通 第10章 存储过程和函数(共19页).pptMySQL从入门到精通 第11章 视图(共20页).pptMySQL从入门到精通 第12章 触发器(共11页).pptMySQL从入门到精通 第13章 用户管理...
存储过程 in参数 的使用 IN参数只用来向过程传递信息,为默认值。 -- 存储过程中 in 参数的 使用 DELIMITER ;; CREATE PROCEDURE name_in(IN `time` VARCHAR(50)) BEGIN SELECT NOW() ,`time`; END ;; CALL name_in...
在MySQL 入门教程中,我们能够看到很多关于如何创建储存过程 和如何利用 IN 和 OUT 参数调用存储过程的示例。这些示例都很简单,能够很好的帮助你理解 MySQL 中创建带参数存储过程的语法。这些示例已在 MySQL 5.5 中...
详细的介绍了mysql5.x的存储过程,从入门到精通
第二阶段---MySQL存储过程实例教程.doc 第二阶段---MYSQL存储过程技术ppt 第二阶段---MySQL导入导出数据库文件.doc 第二阶段---Mysgl数据类型(字段)介绍.doc 第二阶段---MySQL样例数据库、操作库操作表实例教程.doc ...
使用python语言,Django框架,实现调用mysql存储过程。包括通过Navicat工具在mysql数据库中创建存储过程的方法,django配置文件,路由规则,前端页面的使用,通过类实现get和post请示。 适合人群: 初学或刚入门的...
mysql入门到精通的不错文档,里面包含存储过程函数等高级应用讲解。
mysql存储过程,适合新手入门理解并能快速理解存储过程。
NULL 博文链接:https://yj09123.iteye.com/blog/1856680
MySQL5.7从入门到精通。从安装到配置、数据库的创建、数据类型和运算符、函数、索引、存储过程等。
教程名称:Mysql从入门到精通视频教程(共29集)课程目录:【】mysql视频教程mysql PPT【】第1讲 数据库概念【】第2讲 mysql入门语句【】第3讲 增删改查语句介绍【】第4讲 整型列的字节与存储范围【】第5讲 整型列的...
1.mysql 备份数据 2.Mysql 更新数据 ...10.浅谈MySQL存储引擎选择InnoDB还是MyISAM 11.浅谈unique列上插入重复值的MySQL解决方案 12.深入了解MySQL 5.5分区功能增强.doc 13.在MySQL中操作日期和时间