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语句的更多相关文章

  1. 第二百八十二节,MySQL数据库-MySQL视图

    MySQL数据库-MySQL视图 1.视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 2.也 ...

  2. 第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示

    第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示 首先了解一下static静态文件与上传资源的区别,static静态文件里面一般防止的我们网站样式的文件, ...

  3. 第1 章 mysql数据库之简单的DDL和DML sql语句

    一.SQL 介绍 1.什么是sql? SQL,英文全称(Structured Query Language),中文是结构化查询语言,它是一种对关系数据库中数据进行定义和操作的语言方法,是大多数关系数据 ...

  4. 第二百八十一节,MySQL数据库-SQL注入和pymysql模块防止SQL注入

    MySQL数据库-SQL注入和pymysql模块防止SQL注入 SQL注入就是通过SQL语句绕开程序判断,获取到数据库的内容 下面以一个简单的程序登录SQL注入举例: 正常登录 1.数据库有一张会员表 ...

  5. 第二百八十节,MySQL数据库-外键链表之一对多,多对多

    MySQL数据库-外键链表之一对多,多对多 外键链表之一对多 外键链表:就是a表通过外键连接b表的主键,建立链表关系,需要注意的是a表外键字段类型,必须与要关联的b表的主键字段类型一致,否则无法创建索 ...

  6. 第二百七十七节,MySQL数据库-数据表、以及列的增删改查

    MySQL数据库-数据表.以及列的增删改查 1.创建一个表 CREATE(创建) TABLE(表) ENGINE(引擎) ENGINE=INNODB(引擎)还有很多类引擎,这里只是简单的提一下INNO ...

  7. MySQL数据库详解(二)执行SQL更新时,其底层经历了哪些操作?

    ​ 前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块.相信你还记得,一条查询语句的执行过程一般是经过连接器.分析器.优化器.执行器等功能模块,最后到达存储引擎. 那么,一条更 ...

  8. MySQL数据库详解(一)执行SQL查询语句时,其底层到底经历了什么?

    一条SQL查询语句是如何执行的? 前言 ​ 大家好,我是WZY,今天我们学习下MySQL的基础框架,看一件事千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题.同样,对于MyS ...

  9. 在.net core web 项目中操作MySql数据库(非ORM框架,原生sql语句方式)

    本案例通过MySql.Data和Dapper包执行原生sql,实现对数据库的操作. 操作步骤: 第1步:在MySql数据库中新建表User(使用Navicat For MySql工具) 建表语句: c ...

随机推荐

  1. Python atan() 函数

    描述 atan() 返回x的反正切弧度值. 语法 以下是 atan() 方法的语法: import math math.atan(x) 注意:atan()是不能直接访问的,需要导入 math 模块,然 ...

  2. Scanner类nextInt方法的使用注意点

    一.先看一段正常的代码 1. 一段用Scanner捕获键盘输入的代码: Scanner sc = new Scanner(System.in); // 先读取键盘输入的字符串 System.out.p ...

  3. Pandas dataframe 与 Spark dataframe 的区别

    区别 :http://www.voidcn.com/article/p-wsqbotem-boa.html 获取列名的列表: DataFrame.columns.values.tolist()

  4. js 正则表达式 exec 和 match的使用

    match body.match(/\d\.\d\.\d\.\d:\d/g); // 推荐使用exec可以拿到多个数组 exec var a = [ 'PHPSESSID=sglvjui97o18bg ...

  5. [na]非对称加密方式&带加密的数字签名交互流程

    1,对称加密 2,混合加密 3.数字签名 4,带加密的数字签名

  6. [na]pc加入域认证细节

    这也是以前好奇,因为学生时候,经常机房上网, 对一些譬如.. 现在看来很low了. 是小作坊式的技术, 真正上不了台面的.扛不住生产的压力. ftp共享 计算机统一管理等 无盘/网克等特别好奇 计算机 ...

  7. Ubantu 安装boost环境

    boost版本为: boost_1_61_0ubuntu版本为:ubuntu-14.04 这里有两种安装方法: ==============第一种:也是最简单的:进入linux系统后,输入   # a ...

  8. C++11 long long使用及输出

    相比于C++98标准,C++11整型的最大改变就是多了 long long.分为两种:long long 和unsigned long long.在C++11中,标准要求long long 整型可以在 ...

  9. Yii2.0 权威指南

    Yii 是一个高性能,基于组件的 PHP 框架,用于快速开发 Web 应用程序. 一.安装1.Composer 安装Composer是一个基于项目的依赖管理器,负责将PHP项目所依赖的包或库安装到项目 ...

  10. GNU风格 ARM汇编语法5

    . GNU汇编程序中的常数 <>十进制数以非0数字开头,如:123和9876: <>二进制数以0b开头,其中字母也可以为大写: <>八进制数以0开始,如:,: &l ...