zoukankan      html  css  js  c++  java
  • mysql中Prepare、execute、deallocate的使用方法

    mysql中Prepare、execute、deallocate的使用方法
    PREPARE语句准备好一条SQL语句,并分配给这条SQL语句一个名字供之后调用。准备好的SQL语句通过EXECUTE命令执行,通过DEALLOCATE PREPARE命令释放掉。

    语句的名字不区分大小写。准备好的SQL语句名字可以是字符串,也可以是用户指定的包含SQL文本的变量。PREPARE中的SQL文本必须代表一条单独的SQL语句而不能是多条SQL语句。在SQL语句中,? 字符用来作为后面执行查询使用的一个参数。? 不能加上引号,及时打算将它们绑定到字符变量中也不可以。

    基本语法
    PREPARE stmt from '你的sql语句'; // PREPARE msql FROM @MyQuery; 变量存放sql
    EXECUTE stmt (如果sql有参数的话, USING xxx,xxx); // 这里USING的只能是会话变量
    DEALLOCATE PREPARE stmt;
     
    预定义好sql.
    执行预定义的sql
    释放掉数据库连接
    扩展一下这个语法还有什么作用呢?
    他还可以在存储过程中动态的拼接表名,字段名,来达到动态查询的效果
    sql语句中还可以用?来代表参数,这样可以有效的防止sql注入
    实例用法
    delimiter //
    create procedure myTest()
    begin
    set @_sql = 'select ? + ?';
    set @a = 5;
    set @b = 6;
    PREPARE stmt from @_sql; // 预定义sql
    EXECUTE stmt USING @a,@b;// 传入两个会话变量来填充sql中的 ?
    DEALLOCATE PREPARE stmt; // 释放连接
    end //
     
    delimiter //
    create procedure myTest(in columnName varchar(32)) // 传入一个字符串
    BEGIN
    drop table if exists tmpTable; // 如果临时表存在先删除掉
    set @_sql = concat('create temporary table if not exists tmpTable( ', columnName, ' varchar(32), id int(11), _name varchar(32));'); // 创建临时表的语法,我们把传入的参数拼接进来
    PREPARE stmt from @_sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt; // 执行
    desc tmpTable;
    end //

    ————————————————
    版权声明:本文为CSDN博主「HERO-WRH」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_38216661/article/details/98871552

  • 相关阅读:
    [BZOJ4034][HAOI2015]树上操作
    [BZOJ1030][JSOI2007]文本生成器
    [BZOJ2763][JLOI2011]飞行路线
    [POJ3667]Hotel
    [codevs1566]染色
    [codevs2460]树的统计
    [BZOJ2667][cqoi2012][kcoj]模拟工厂
    [NOI2009][codevs1846]KCOJ0191]植物大战僵尸
    [POJ1087]A Plug for UNIX
    Educational Round 66 题解
  • 原文地址:https://www.cnblogs.com/javalinux/p/14989392.html
Copyright © 2011-2022 走看看