SET @xx="name,bm";

SET @sql1 = CONCAT('select ',@xx,' from people');

prepare s1 from @sql1;

execute s1;

deallocate prepare s1;

用于预处理语句的SQL语法

MySQL 5.1对服务器一方的预制语句提供支持。如果您使用合适的客户端编程界面,则这种支持可以发挥在MySQL 4.1中实施的高效客户端/服务器二进制协议的优势。候选界面包括MySQL C API客户端库(用于C程序)、MySQL Connector/J(用于Java程序)和MySQL Connector/NET。例如,C API可以提供一套能组成预制语句API的函数调用。请参见25.2.4节,“C API预处理语句”。其它语言界面可以对使用了二进制协议(通过在C客户端库中链接)的预制语句提供支持。有一个例子是

对预制语句,还有一个SQL界面可以利用。与在整个预制语句API中使用二进制协议相比,本界面效率没有那么高,但是它不要求编程,因为在SQL层级,可以直接利用本界面:

·当您无法利用编程界面时,您可以使用本界面。

·有些程序允许您发送SQL语句到将被执行的服务器中,比如mysql客户端程序。您可以从这些程序中使用本界面。

·即使客户端正在使用旧版本的客户端库,您也可以使用本界面。唯一的要求是,您能够连接到一个支持预制语句SQL语法的服务器上。

预制语句的SQL语法在以下情况下使用:

·在编代码前,您想要测试预制语句在您的应用程序中运行得如何。或者也许一个应用程序在执行预制语句时有问题,您想要确定问题是什么。

·您想要创建一个测试案例,该案例描述了您使用预制语句时出现的问题,以便您编制程序错误报告。

·您需要使用预制语句,但是您无法使用支持预制语句的编程API。

预制语句的SQL语法基于三个SQL语句:

PREPARE stmt_name FROM preparable_stmt;

EXECUTE stmt_name [USING @var_name [, @var_name] ...];

{DEALLOCATE | DROP} PREPARE stmt_name;

PREPARE语句用于预备一个语句,并赋予它名称stmt_name,借此在以后引用该语句。语句名称对案例不敏感。preparable_stmt可以是一个文字字符串,也可以是一个包含了语句文本的用户变量。该文本必须展现一个单一的SQL语句,而不是多个语句。使用本语句,‘?’字符可以被用于制作参数,以指示当您执行查询时,数据值在哪里与查询结合在一起。‘?’字符不应加引号,即使您想要把它们与字符串值结合在一起,也不要加引号。参数制作符只能被用于数据值应该出现的地方,不用于SQL关键词和标识符等。

如果带有此名称的预制语句已经存在,则在新的语言被预备以前,它会被隐含地解除分配。这意味着,如果新语句包含一个错误并且不能被预备,则会返回一个错误,并且不存在带有给定名称语句。

预制语句的范围是客户端会话。在此会话内,语句被创建。其它客户端看不到它。

在预备了一个语句后,您可使用一个EXECUTE语句(该语句引用了预制语句名称)来执行它。如果预制语句包含任何参数制造符,则您必须提供一个列举了用户变量(其中包含要与参数结合的值)的USING子句。参数值只能有用户变量提供,USING子句必须准确地指明用户变量。用户变量的数目与语句中的参数制造符的数量一样多。

您可以多次执行一个给定的预制语句,在每次执行前,把不同的变量传递给它,或把变量设置为不同的值。

要对一个预制语句解除分配,需使用DEALLOCATE PREPARE语句。尝试在解除分配后执行一个预制语句会导致错误。

如果您终止了一个客户端会话,同时没有对以前已预制的语句解除分配,则服务器会自动解除分配。

以下SQL语句可以被用在预制语句中:CREATE TABLE, DELETE, DO, INSERT, REPLACE, SELECT, SET, UPDATE和多数的SHOW语句。目前不支持其它语句。

以下例子显示了预备一个语句的两种方法。该语句用于在给定了两个边的长度时,计算三角形的斜边。

第一个例子显示如何通过使用文字字符串来创建一个预制语句,以提供语句的文本:

mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';

mysql> SET @a = 3;

mysql> SET @b = 4;

mysql> EXECUTE stmt1 USING @a, @b;

+------------+

| hypotenuse |

+------------+

|          5 |

+------------+

mysql> DEALLOCATE PREPARE stmt1;

1

0

分享到:

2010-06-24 10:53

浏览 11069

分类:数据库

评论

mysql执行字符串sql结果复制被变量_mysql存储过程-执行字符串变量的sql相关推荐

  1. sql server复制表_具有超过246列的表SQL Server复制

    sql server复制表 问题 (Problem) In our environment we use SQL Server merge replication to replicate data ...

  2. mysql 查询绑定变量_MySQL高级特性——绑定变量

    从MySQL 4.1 版本开始,就支持服务器端的绑定变量,这大大提高了客户端和服务器端数据传输的效率 介绍 当创建一个绑定变量 SQL 时,客户端会向服务器发送一个SQL语句的原型.服务器端收到这个S ...

  3. mysql存储过程给多个变量赋值_MySQL存储过程如何进行变量的定义和赋值

    昨天我们讲了mysql存储过程创建修改与删除,下面我们这篇教程是讲关于mysql存储过程中变量的定义赋值操作哦. 一.变量的定义 mysql中变量定义用declare来定义一局部变量,该变量的使用范围 ...

  4. mysql主从复制与主主复制的对比_MySQL主从复制与主主复制

    mysql 的主从复制: 实验环境: linux CentOS7两台:192.168.230.10(主)----192.168.230.11(从)(系统安装好,关掉防火墙或配置好防火墙) mysql ...

  5. mysql 存储过程如何声明多个变量赋值_mysql存储过程:定义变量,赋值,判断,输出...

    1.定义变量,赋值,判断,输出 DROP PROCEDURE IF EXISTS proc_first; -- 如果proc_first存在就删除 create procedure proc_firs ...

  6. mysql 存储过程 长字符串_mysql存储过程瓜分字符串

    mysql存储过程分割字符串 DROP PROCEDURE IF EXISTS split_string; CREATE PROCEDURE split_string(IN to_split VARC ...

  7. oracle 存过传变量,Oracle 存储过程—为数传递变量

    oracle 存储过程的基本语法 create or replace procedure proc1( p_para1 varchar2, p_para2 out varchar2, p_para3 ...

  8. sql oracle复制一张表里,Oracle如何复制表的sql语句

    以下的文章主要是介绍Oracle复制表的sql语句,其中包括如何复制表结构的sql.以及如何复制相关表的结构又复制表中的数据sql.以下就是相关内容的具体介绍,望你浏览完以下的内容会有所收获. 如下, ...

  9. mysql 设置查询变量_MySQL查询优化--调整内部变量的详解

    MySQL是如此的开放,所以可轻松地进一步调整其缺省设置以获得更优的性能及稳定性.需要优化的一些关键变量如下: 改变索引缓冲区长度(key_buffer) 一般,该变量控制缓冲区的长度在处理索引表(读 ...

最新文章

  1. 关于智能车竞赛程序公正问题的讨论
  2. 深度学习图像搜索与识别
  3. mysql怎样修改my ini_mysql通过修改my.ini设置系统变量
  4. Linux/Unix the definition of cpu-nice
  5. git 32位_完整的GIT笔记 快速上手小白教程
  6. new Class() 与 Class.newInstance()
  7. 取得浏览器当前鼠标的X,Y坐标的JavaScript脚本及document元素的一些重要属性
  8. list(链表)容器
  9. 谈谈EOS的出块时间,不可逆时间,BFT
  10. 微博html5版打不开,电脑新浪微博页面打不开怎么办|电脑微博无法打开的解决方法...
  11. 算法学习系列(贪心算法)—多处最优服务次序问题
  12. 微信分享带图片,描述(php版)
  13. WebServices(转)
  14. python 路由_静态路由配置
  15. 【深度学习】图像分割概述
  16. WI-FI模块ESP8266(针对初学者)
  17. 15k运维面试题带答案分享
  18. 页面显示LCD液晶字体,特殊字体,@font-face属性详细用法,配图
  19. 看微软IE7.0更新的一家之言(转)
  20. 正点原子STM32 H743完成RT Thread下的LAN8720 网卡驱动 LWIP跑起来

热门文章

  1. 2个月拿到华为offer,身为00后的我拿30K没问题吧?
  2. 婚恋交友管理系统,一键匹配,让你遇见心仪的TA
  3. 从git更新代码到本地
  4. 白话易经·杂卦传- -
  5. JSON数据解析的三种情况+pjson的方式
  6. cbow和skip-gram实现关键代码解析
  7. 微博的未来 (Twitter创始人Evan Williams介绍新网站Medium)
  8. 百度由来之众里寻他千百度
  9. 请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素
  10. Android黑屏冻屏死机重启问题