第二百八十七节,MySQL数据库-条件语句、循环语句、动态执行SQL语句
MySQL数据库-条件语句、循环语句、动态执行SQL语句
1、if条件语句
delimiter \\
CREATE PROCEDURE proc_if ()
BEGIN declare i int default 0;
if i = 1 THEN
SELECT 1;
ELSEIF i = 2 THEN
SELECT 2;
ELSE
SELECT 7;
END IF; END\\
delimiter ;
2、循环语句
while循环
delimiter \\
CREATE PROCEDURE proc_while ()
BEGIN DECLARE num INT ;
SET num = 0 ;
WHILE num < 10 DO
SELECT
num ;
SET num = num + 1 ;
END WHILE ; END\\
delimiter ;
repeat循环
delimiter \\
CREATE PROCEDURE proc_repeat ()
BEGIN DECLARE i INT ;
SET i = 0 ;
repeat
select i;
set i = i + 1;
until i >= 5
end repeat; END\\
delimiter ;
loop循环
iterate loop_label退出循环
BEGIN
declare i int default 0;
loop_label: loop
set i=i+1;
if i<8 then
iterate loop_label;
end if;
if i>=10 then
leave loop_label;
end if;
select i;
end loop loop_label;
END
3、动态执行SQL语句
动态执行SQL语句,也就是执行一个存储过程来动态执行SQL语句
举例:有这样一张表

写一个存储过程无参,获取表里id大于11的数据
PREPARE prod FROM存储过程里将字符串解析为sql语句执行,后面跟字符串类型的sql语句
EXECUTE prod USING替换sql语句中的占位符,后面跟要替换占位符的、占位符变量,(sql语句中的占位符是?号)
delimiter $$
DROP PROCEDURE IF EXISTS proc_sql $$ -- 判断proc_sql存储过程存在删除
CREATE PROCEDURE proc_sql () -- 创建proc_sql存储过程
BEGIN
declare p1 int; -- 设置p1变量
set p1 = 11; -- 赋值p1变量等于11
set @p1 = p1; -- 赋值字符串占位符变量等于p1 PREPARE prod FROM 'select * from tb2 where nid > ?'; -- 解析字符串为sql语句
EXECUTE prod USING @p1; -- 执行sql语句,并且用占位符变量替换sql语句中的?号
DEALLOCATE prepare prod; -- 释放解析和执行sql语句 END $$
delimiter ;
执行存储过程,动态执行sql语句
CALL proc_sql(); -- 执行存储过程,动态执行sql语句

写一个存储过程有参,动态传参获取数据
delimiter $$
DROP PROCEDURE IF EXISTS proc_sql $$ -- 判断proc_sql存储过程存在删除
CREATE PROCEDURE proc_sql ( -- 创建proc_sql存储过程
in zfchsql CHAR(90), -- zfchsql接收字符串最大90字符,接收sql语句
in shuzi INT(20) -- shuzi接收整数类型,最大20字符,接收一个id数
)
BEGIN
-- 因为解析字符串为sql语句,和替换sql语句的占位符,需要用户变量,也就是有@的变量,所以需要重新赋值成用户变量
SET @zfchsql = zfchsql;
SET @shuzi = shuzi; PREPARE prod FROM @zfchsql; -- 将接收到的字符串解析为sql语句
EXECUTE prod USING @shuzi; -- 将接收到的整数,替换sql语句中的?号占位符
DEALLOCATE prepare prod; -- 释放解析和执行的sql语句 END $$
delimiter ;
传入参数动态执行sql语句
CALL proc_sql('select * from usr where id > ?',5); -- 传入参数动态执行sql语句

重点:动态执行sql语句,可以防止sql注入,
CALL proc_sql('select * from usr -- where id > ?',5); -- 传入参数动态执行sql语句

第二百八十七节,MySQL数据库-条件语句、循环语句、动态执行SQL语句的更多相关文章
- 第二百八十二节,MySQL数据库-MySQL视图
MySQL数据库-MySQL视图 1.视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 2.也 ...
- 第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示
第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示 首先了解一下static静态文件与上传资源的区别,static静态文件里面一般防止的我们网站样式的文件, ...
- 第1 章 mysql数据库之简单的DDL和DML sql语句
一.SQL 介绍 1.什么是sql? SQL,英文全称(Structured Query Language),中文是结构化查询语言,它是一种对关系数据库中数据进行定义和操作的语言方法,是大多数关系数据 ...
- 第二百八十一节,MySQL数据库-SQL注入和pymysql模块防止SQL注入
MySQL数据库-SQL注入和pymysql模块防止SQL注入 SQL注入就是通过SQL语句绕开程序判断,获取到数据库的内容 下面以一个简单的程序登录SQL注入举例: 正常登录 1.数据库有一张会员表 ...
- 第二百八十节,MySQL数据库-外键链表之一对多,多对多
MySQL数据库-外键链表之一对多,多对多 外键链表之一对多 外键链表:就是a表通过外键连接b表的主键,建立链表关系,需要注意的是a表外键字段类型,必须与要关联的b表的主键字段类型一致,否则无法创建索 ...
- 第二百七十七节,MySQL数据库-数据表、以及列的增删改查
MySQL数据库-数据表.以及列的增删改查 1.创建一个表 CREATE(创建) TABLE(表) ENGINE(引擎) ENGINE=INNODB(引擎)还有很多类引擎,这里只是简单的提一下INNO ...
- MySQL数据库详解(二)执行SQL更新时,其底层经历了哪些操作?
前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块.相信你还记得,一条查询语句的执行过程一般是经过连接器.分析器.优化器.执行器等功能模块,最后到达存储引擎. 那么,一条更 ...
- MySQL数据库详解(一)执行SQL查询语句时,其底层到底经历了什么?
一条SQL查询语句是如何执行的? 前言 大家好,我是WZY,今天我们学习下MySQL的基础框架,看一件事千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题.同样,对于MyS ...
- 在.net core web 项目中操作MySql数据库(非ORM框架,原生sql语句方式)
本案例通过MySql.Data和Dapper包执行原生sql,实现对数据库的操作. 操作步骤: 第1步:在MySql数据库中新建表User(使用Navicat For MySql工具) 建表语句: c ...
随机推荐
- 进程枚举之PSAPI函数
使用PSAPI (Process StatusAPI)函数 这是一种Windows NT/2000下的方法.核心是使用EnumProcesses函数.它的原型如下: BOOL EnumProcesse ...
- [转]Windows 7自带很好用的磁盘检查与修复的环境
大家可能都知道Windows 7自带很好用的检查与修复的环境.在启动系统前按F8(就是进入安全模式的方法),Windows 7会有一个修复计算机的选项.选择进入,装载一些必要的文件之后,选择语言.登陆 ...
- chromedriver 下载地址
重要的事情说三遍 chromedriver 下载地址 chromedriver 下载地址 chromedriver 下载地址 http://chromedriver.storage.googleapi ...
- django 连接mysql 数据库
1.新建一个mysite项目:django-admin startproject mysite 2.进入项目目录,新建一个app : python manage.py startapp polls 3 ...
- 安装ubuntu和windows双系统后,如何修改默认启动项
在安装了Ubuntu16.04系统之后,系统会默认自启动Ubuntu16.04,而我们大多数情况下可能都在使用windows系统,不修改默认设置,不经意间便会启动了Ubuntu16.04,通过我的经历 ...
- adobe acrobat 无效批注对象
http://blog.csdn.net/pipisorry/article/details/40894881 adobe acrobat一直弹出 无效批注对象 检查后提示:"本页面上的全部 ...
- 关于modelsim时序仿真的几篇文章
1.http://wenku.baidu.com/view/386597f37c1cfad6195fa797.html 2.http://wenku.baidu.com/view/4b9521f9f7 ...
- maven(1)------使用myeclipse构建maven项目
maven官网:http://maven.apache.org/ 依据官网的说法,Maven是一个采用纯Java编写的开源项目管理工具,基于一个称为项目对象模型(POM)的概念,可以管理项目的生命周期 ...
- Linux下安装Python3.6和第三方库
如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境, 比如yum!!!!! 不要动现有的python2环境! 一.安装p ...
- c++之五谷杂粮---3
3.1如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为重载函数. 3.1.1不允许两个函数除了返回类型外所有的要素都相同.(这也是很好解释的) #include<iostream&g ...