mysql 1117_1117Mysql prepare预处理语句

转自http://www.jb51.net/article/81378.htm

综述:一般用来拼凑SQL然后执行

MySQL 5.1对服务器一方的预制语句提供支持。如果您使用合适的客户端编程界面,则这种支持可以发挥在MySQL 4.1中实施的高效客户端/服务器二进制协议的优势。候选界面包括MySQL C API客户端库(用于C程序)、MySQL Connector/J(用于Java程序)和MySQL Connector/NET。例如,C API可以提供一套能组成预制语句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;

第二个例子是相似的,不同的是提供了语句的文本,作为一个用户变量:

mysql> SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';

mysql> PREPARE stmt2 FROM @s;

mysql> SET @a = 6;

mysql> SET @b = 8;

mysql> EXECUTE stmt2 USING @a, @b;

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

| hypotenuse |

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

| 10 |

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

mysql> DEALLOCATE PREPARE stmt2;

对于已预备的语句,您可以使用位置保持符。以下语句将从tb1表中返回一行:

mysql> SET @a=1;

mysql> PREPARE STMT FROM "SELECT * FROM tbl LIMIT ?";

mysql> EXECUTE STMT USING @a;

以下语句将从tb1表中返回第二到第六行:

mysql> SET @skip=1; SET @numrows=5;

mysql> PREPARE STMT FROM "SELECT * FROM tbl LIMIT ?, ?";

mysql> EXECUTE STMT USING @skip, @numrows;

预制语句的SQL语法不能被用于带嵌套的风格中。也就是说,被传递给PREPARE的语句本身不能是一个PREPARE, EXECUTE或DEALLOCATE PREPARE语句。

预制语句的SQL语法与使用预制语句API调用不同。例如,您不能使用mysql_stmt_prepare() C API函数来预备一个PREPARE, EXECUTE或DEALLOCATE PREPARE语句。

预制语句的SQL语法可以在已存储的过程中使用,但是不能在已存储的函数或触发程序中使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为了偷吃东西你能有多拼?! | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅(图源网络,侵权删)

[music]Canon and Gigue in D major

卡农Canon——复调音乐的一种,原意为“规律”。一个声部的曲调自始至终追逐着另一声部,直到最后……最后的一个小结,最后的一个和弦,它们会融合在一起,永不分离。缠绵制及的音乐,就像两个人生死追随。 Canon (卡农) 是…

Nacos真香,从零到一学起来

Nacos是阿里巴巴开源的微服务管理平台,可以帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。这篇文章主要来讲一下Nacos作为配置中心和注册中心的使用。1 安装 1.1 linux下安装首先搭建一套单机版的Nacos集群。Nacos的安装有两种方式,…

Servlet学习一

Servlet担当着客户请求(Web浏览器或其它HTTP客户程序)与服务器响应(HTTP服务器上数据库或应用程序)的中间层。Servlet是位于Web服务器内部的服务器端Java应用程序,与传统的从命令行启动的Java应用程序不同,…

自律的程度,决定你人生的高度

全世界只有3.14 % 的人关注了青少年数学之旅对于不少用户来说,微信已经成为了获取新资讯的重要途径之一。如何保证自己找到「值得看」的内容?每天更新的文章这么多,哪些才值得你看呢?今天就为大家推荐一些颜值与才华并存的好评公众…

pythonjam进不去怎么办_教程看了一遍又一遍,自学Python还是连门都进不去?

首先大家学习python一定要以实用性为导向!如果去盲目看教程,结果大多是浅尝辄止,从入门到放弃。大家所谓“看不进去”或者“记不住”,本质上还是“看不懂”。你可能觉得书上或者教程写的都理解了,但是去示例代码照着敲…

标准MD5 .Net,实现!的对与错!

关键之处在,从byte到字符串的处理下面是一个错误的实现! /**//// <summary> /// 返回32位md5十六进制加密 /// </summary> /// <param name"strValue">待加密的字符串</param> /// <returns></return…

[导入]Asp.net中动态在中加入Scrpit标签

许久以前&#xff0c;写过一篇《asp.net页中动态加入样式表文件》&#xff0c;后来发现在使用时如果每页都写这么个函数真是很麻烦&#xff0c;于是自己写了一个Page的派生。将这个函数加了进去。/**////<summary>///作者 邹健 ///日期 20070202 ///重载的Page类。…

android 多布局

做为最后的方法&#xff0c;也是最后一个才会考虑的方法&#xff0c;那就是为不同的尺寸界面单独写布局。不到万不得已不要用这个方法&#xff0c;相信不少人和我一样都被逼着用过这个方法吧。需要说明的是&#xff0c;横竖屏切换使用不同布局也是用这个方法解决的&#xff1b;…

支持c#的分表分库组件-Ctrip DAL

简介Ctrip DAL是携程框架部开发的数据库访问框架&#xff0c;支持代码生成和水平扩展。其由携程技术中心框架部DAL团队开发&#xff0c;历经3年不断打磨&#xff0c;并在长期的实际使用中基于大量的用户反馈不断优化。开源范围包括代码生成器&#xff0c;Java客户端和C#客户端。…

万万想不到:吸烟的辐射量比原子弹爆炸点还厉害!

全世界只有3.14 %的人关注了青少年数学之旅近日&#xff0c;外国视频网站上一段关于世界上辐射最高地点的短片火了起来。片中&#xff0c;一位外国小哥亲身探秘了那些广为人知的辐射地点如切尔诺贝利、福岛核电站等&#xff0c;并且给出了究竟哪里的辐射最高的结论。什么是辐射…

伟大架构师的秘密

自我评估• 您当前的项目是否应用了抽象层次&#xff1f; • 层次是否定义完善&#xff1f; • 项目团队是否很好地理解了这些层次&#xff1f; • 如果复杂性在一个层次中变得过大&#xff0c;团队是否将其分离到视图中呢&#xff1f; • 团队是否在层次间保持一致性&…

网站开发标准

Web 开发的分散性和交互性&#xff0c;决定了 Web 开发必须遵从一定的开发规范和技术约定&#xff0c;只有每个开发人员都按照一个共同的规范去设计、沟通、开发、测试、部署&#xff0c;才能保证整个开发团队协调一致的工作&#xff0c;从而提高开发工作效率&#xff0c;提升工…

solr 配置mysql数据源_solr data-config.xml配置文件的见解mysql数据源

陆续完善&#xff1a;检查一下dataSource中的url一般都能用。如果不能用 将后面的编码格式去掉 试试看data-config.xml配置文件deltaImportQuery"select id,%Y-%m-%d) last_modified,id) as char) as dockey from product where cast(concat(p,id) as char)${dih.delta.do…

视频专辑:Hibernate 视频

为什么80%的码农都做不了架构师&#xff1f;>>> 专辑&#xff1a;Hibernate 视频 简介:郭宏志 Hibernate从入门到深入,郭宏志气主讲 1 郭宏志 Hibernate 01 简介 2013-10-29 13:50 | 播放(11) | 评论(0) | 时长:1:17:58 2 郭宏志 Hibernate 02 配置 2013-10-29…

Subversion之路--实现精细的目录访问权限控制(v1.0 更新于2006.12.05)(二)

深入本章将详细介绍前一章所涉及的两个配置文件&#xff0c; svnserve.conf 和 authz.conf&#xff0c;通过对配置逐行的描述&#xff0c;来阐明其中的一些细节含义。除此之外的其他配置、安装等内容&#xff0c;不是本文重点&#xff0c;读者若有什么疑问&#xff0c;请参考后…

未能在给定的程序集中找到任何适合于指定的区域性(或非特定区域性)的资源解决办法...

今天在给一个程序加入ImageList的时候碰到了这样的运行错误&#xff1a; 未能在给定的程序集中找到任何适合于指定的区域性(或非特定区域性)的资源。请确保已将“frmMain.resources”正确嵌入或链接到程序集“XXX”。 baseName: yyy locationInfo: xxx.yyy resource file name:…

人体的血管连起来竟能绕地球两圈!?| 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅你知道怎么回复吗&#xff1f;这五花肉真。。白啊来自唐代的敦煌文书。。。《放妻书》好像发现了点什么不可告人的秘密如果人体的血管首尾相连总长度约为96560.64千米大概可以绕地球2.5圈密集恐惧症表示已经qu世了&#xff08;图源网络…

云原生系统之弹性模式

大纲1.云原生系统的弹性模式resiliency pattern 1.1 服务故障的雪崩效应 1.2 回应之前云原生--弹性请求的疑问&#xff1f;2. 弹性模式&#xff1a;作用在下游请求消息上3. 短期中断的响应码4. Polly经典策略5. Golang 断路器模式德国哲学家尼采说过&#xff1a;那些杀…

终端编译opengl程序编译运行_ubuntu编译opengl和demo之二(glfw版本)

[TOC]1、安装GL和glut等sudo apt-get install mesa-common-dev libgl1-mesa-dev libglu1-mesa-devsudo apt-get install freeglut3-devsudo apt-get install build-essential gdb subversionsudo apt-get install automake autoconf libtoolsudo apt-get install libgtk2.0-dev…