程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 懂得Mysql prepare預處置語句

懂得Mysql prepare預處置語句

編輯:MySQL綜合教程

懂得Mysql prepare預處置語句。本站提示廣大學習愛好者:(懂得Mysql prepare預處置語句)文章只能為提供參考,不一定能成為您想要的結果。以下是懂得Mysql prepare預處置語句正文


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語法可以在已存儲的進程中應用,然則不克不及在已存儲的函數或觸發法式中應用。

以上就是本文的全體內容,願望對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved