久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL中預處理語句prepare、execute、deallocate怎么用

157次閱讀
沒有評論

共計 1942 個字符,預計需要花費 5 分鐘才能閱讀完成。

這篇文章將為大家詳細講解有關 MySQL 中預處理語句 prepare、execute、deallocate 怎么用,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

MySQL 官方將 prepare、execute、deallocate 統稱為 PREPARE STATEMENT。
我習慣稱其為【預處理語句】。

其用法十分簡單,

PREPARE stmt_name FROM preparable_stmt

EXECUTE stmt_name

 [USING @var_name [, @var_name] …]    –

{DEALLOCATE | DROP} PREPARE stmt_name

舉個栗子:

mysql PREPARE pr1 FROM SELECT ?+?

Query OK, 0 rows affected (0.01 sec)

Statement prepared

mysql SET @a=1, @b=10 ;

Query OK, 0 rows affected (0.00 sec)

mysql EXECUTE pr1 USING @a, @b;

+——+

| ?+? |

+——+

| 11  |

+——+

1 row in set (0.00 sec)

mysql EXECUTE pr1 USING 1, 2;    — 只能使用用戶變量傳遞。

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the 

right syntax to use near 1, 2 at line 1

mysql DEALLOCATE PREPARE pr1;

Query OK, 0 rows affected (0.00 sec)

使用 PAREPARE STATEMENT 可以減少每次執行 SQL 的語法分析,
比如用于執行帶有 WHERE 條件的 SELECT 和 DELETE,或者 UPDATE,或者 INSERT,只需要每次修改變量值即可。
同樣可以防止 SQL 注入,參數值可以包含轉義符和定界符。

適用在應用程序中,或者 SQL 腳本中均可。

更多用法:

同樣 PREPARE … FROM 可以直接接用戶變量:

mysql CREATE TABLE a (a int);

Query OK, 0 rows affected (0.26 sec)

mysql INSERT INTO a SELECT 1;

Query OK, 1 row affected (0.04 sec)

Records: 1  Duplicates: 0  Warnings: 0

mysql INSERT INTO a SELECT 2;

Query OK, 1 row affected (0.04 sec)

Records: 1  Duplicates: 0  Warnings: 0

mysql INSERT INTO a SELECT 3;

Query OK, 1 row affected (0.04 sec)

Records: 1  Duplicates: 0  Warnings: 0

mysql SET @select_test = CONCAT(SELECT * FROM , @table_name);

Query OK, 0 rows affected (0.00 sec)

mysql SET @table_name = a

Query OK, 0 rows affected (0.00 sec)

mysql PREPARE pr2 FROM @select_test;

Query OK, 0 rows affected (0.00 sec)

Statement prepared

mysql EXECUTE pr2 ;

+——+

| a |

+——+

| 1 |

| 2  |

| 3  |

+——+

3 rows in set (0.00 sec)

mysql DROP PREPARE pr2; — 此處 DROP 可以替代 DEALLOCATE

Query OK, 0 rows affected (0.00 sec)

每一次執行完 EXECUTE 時,養成好習慣,須執行 DEALLOCATE PREPARE … 語句,這樣可以釋放執行中使用的所有數據庫資源(如游標)。
不僅如此,如果一個 session 的預處理語句過多,可能會達到 max_prepared_stmt_count 的上限值。

預處理語句只能在創建者的會話中可以使用,其他會話是無法使用的。
而且在任意方式(正常或非正常)退出會話時,之前定義好的預處理語句將不復存在。
如果在存儲過程中使用,如果不在過程中 DEALLOCATE 掉,在存儲過程結束之后,該預處理語句仍然會有效。

關于“MySQL 中預處理語句 prepare、execute、deallocate 怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-27發表,共計1942字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 祁阳县| 抚顺县| 泾阳县| 娄底市| 彩票| 信丰县| 稻城县| 双峰县| 仙居县| 滦南县| 阿勒泰市| 佛山市| 抚宁县| 壤塘县| 佳木斯市| 泰顺县| 武胜县| 宁武县| 长寿区| 石门县| 永登县| 砀山县| 邻水| 西畴县| 手游| 龙游县| 伊春市| 固镇县| 甘孜县| 确山县| 永昌县| 甘洛县| 广汉市| 新津县| 镇雄县| 鹤峰县| 星子县| 鄄城县| 崇文区| 浪卡子县| 台山市|