国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - 理解Mysql prepare預處理語句

理解Mysql prepare預處理語句

2020-06-02 15:06pursuer.chen Mysql

這篇文章主要幫助大家學習理解Mysql prepare預處理語句,對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語句:

?
1
2
3
4
5
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語句。目前不支持其它語句。

以下例子顯示了預備一個語句的兩種方法。該語句用于在給定了兩個邊的長度時,計算三角形的斜邊。

第一個例子顯示如何通過使用文字字符串來創建一個預制語句,以提供語句的文本:

?
1
2
3
4
5
6
7
8
9
10
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
2
3
4
5
6
7
8
9
10
11
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表中返回一行:

?
1
2
3
4
5
mysql> SET @a=1;
 
mysql> PREPARE STMT FROM "SELECT * FROM tbl LIMIT ?";
 
mysql> EXECUTE STMT USING @a;

以下語句將從tb1表中返回第二到第六行:

?
1
2
3
4
5
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語法可以在已存儲的過程中使用,但是不能在已存儲的函數或觸發程序中使用。

以上就是本文的全部內容,希望對大家的學習有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 热久久国产 | 一级毛片国产 | 亚洲综合国产 | 午夜av成人 | 日本激情网 | 国产精品久久久久久久免费大片 | 国产福利精品一区 | 久久精品中文字幕 | 日本三级韩国三级三级a级中文 | 中文字幕精品一区 | 女人性做爰免费网站 | 色综合社区 | 亚州中文字幕 | 一本一道久久a久久精品逆3p | 久久一区视频 | 国产欧美日韩二区 | 97av在线 | 久久噜噜噜精品国产亚洲综合 | 国产精品视频入口 | 四虎成人免费电影 | 二区三区在线 | 桃色视频在线播放 | 福利精品视频 | 狠狠的日 | 亚洲电影在线播放 | 亚洲成av人影片在线观看 | 国产福利视频在线观看 | 黄色一级视频在线观看 | 欧美精品v国产精品v日韩精品 | 久久久久久亚洲av毛片大全 | 欧美色综合天天久久综合精品 | 日韩精品免费 | 亚洲男人天堂网 | 国产精品久久久爽爽爽麻豆色哟哟 | 4h影院| 久久美| 国产精品美女视频 | 国产欧美久久久久久 | 精久久| 亚洲黄色高清 | 日本少妇bbbb爽爽bbb美 |