欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL Prepared語(yǔ)句的具體使用

 更新時(shí)間:2024年09月03日 09:44:27   作者:V1ncent Chen  
本文主要介紹了MySQL Prepared語(yǔ)句的具體使用,可以利用prepared語(yǔ)句來(lái)避免重復(fù)解析SQL的開(kāi)銷,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在數(shù)據(jù)庫(kù)應(yīng)用中,很多SQL語(yǔ)句都會(huì)重復(fù)執(zhí)行很多次,每次執(zhí)行可能只是where條件中的變量值不同,但MySQL依然會(huì)解析SQL語(yǔ)法并生成執(zhí)行計(jì)劃。對(duì)于這類情況,可以利用prepared語(yǔ)句來(lái)避免重復(fù)解析SQL的開(kāi)銷。

一、prepared語(yǔ)句優(yōu)點(diǎn)

prepared語(yǔ)句通過(guò)準(zhǔn)備一個(gè)SQL執(zhí)行對(duì)象,然后通過(guò)execute語(yǔ)句來(lái)重復(fù)進(jìn)行執(zhí)行,在每次執(zhí)行的過(guò)程中提供變量的實(shí)際值。相比于重復(fù)執(zhí)行SQL語(yǔ)句,prepared statement具有如下優(yōu)勢(shì):

  • 在execute語(yǔ)句重復(fù)執(zhí)行的過(guò)程中,每次只有傳入的變量值不同,SQL的執(zhí)行計(jì)劃不會(huì)改變,避免重復(fù)解析SQL。
  • 避免SQL注入攻擊。

二、prepare語(yǔ)句用法

prepare statement主要有3個(gè)組成部分:

  • prepare語(yǔ)句:生成一個(gè)prepared statement對(duì)象并為其指定別名,可使用占位符?指定變量。
  • execute語(yǔ)句:通過(guò)別名執(zhí)行一個(gè)prepared statement,可通過(guò)using子句為變量提供值。
  • deallocate prepared語(yǔ)句:通過(guò)別名釋放一個(gè)prepared statement。

Prepare語(yǔ)句的生效范圍是會(huì)話,MySQL使用參數(shù)max_prepared_stmt_count來(lái)控制語(yǔ)句的最大數(shù)量,如果將該參數(shù)設(shè)置為0,將會(huì)禁用prepared statement功能。

show variables like 'max_prepared_stmt_count';

在這里插入圖片描述

執(zhí)行如下SQL準(zhǔn)備示例數(shù)據(jù):

create table person(
id int auto_increment primary key,
name varchar(32));
insert into person values (null, 'Vincent'), (null, 'Victor'), (null, 'Grace');
select * from person;

在這里插入圖片描述

2.1 prepare語(yǔ)句

prepare語(yǔ)句根據(jù)文本生成一個(gè)SQL語(yǔ)句對(duì)象,并為其指定一個(gè)別名,在準(zhǔn)備過(guò)程中,可以使用占位符?來(lái)替代變量:

set @sql = 'select name from person where id=?';
prepare stmt from @sql;

在這里插入圖片描述

示例中通過(guò)變量名來(lái)傳入SQL文本,也可以直接通過(guò)SQL文本prepare,例如:prepare stmt from ‘select name from person where id=?’;

prepare語(yǔ)句還有一個(gè)較常用的場(chǎng)景為動(dòng)態(tài)SQL拼接。即根據(jù)用戶選擇的條件來(lái)快速調(diào)整過(guò)濾條件拼接出不同的SQL:

set @base = 'select * from person where 1=1';
set @id_filter = ' and id=?';
set @name_filter = ' and name=?';
set @sql2 = concat(@base, @id_filter, @name_filter);   -- 選擇了條件,就加入拼接
prepare stmt2 from @sql2;

在這里插入圖片描述

2.2 execute語(yǔ)句

執(zhí)行完prepare語(yǔ)句后,即可用execute語(yǔ)句來(lái)執(zhí)行,如果有?代替的變量,則需要通過(guò)using語(yǔ)句為其指定值(數(shù)量要和prepare語(yǔ)句中?數(shù)量相同)。execute語(yǔ)句在每次執(zhí)行提供不同的變量,即可實(shí)現(xiàn)一次解析,多次執(zhí)行:

set @var1 = 1;
execute stmt using @var1;
set @var2 = 2;
execute stmt using @var2;

在這里插入圖片描述

注意using子句中只能通過(guò)變量來(lái)提供值,如果通過(guò)常量提供值,則會(huì)報(bào)錯(cuò):

execute stmt using 1;

在這里插入圖片描述

2.3 deallocate prepare語(yǔ)句

prepare語(yǔ)句使用完成后可以使用deallocate/drop prepare ….語(yǔ)句手動(dòng)進(jìn)行釋放,另外當(dāng)會(huì)話斷開(kāi)時(shí),所有未釋放的prepare語(yǔ)句也會(huì)自動(dòng)釋放,因此重連或者異常中斷都會(huì)導(dǎo)致prepare statement丟失。

deallocate prepare stmt;

在這里插入圖片描述

到此這篇關(guān)于MySQL Prepared語(yǔ)句的具體使用的文章就介紹到這了,更多相關(guān)MySQL Prepared語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Django nginx配置實(shí)現(xiàn)過(guò)程詳解

    Django nginx配置實(shí)現(xiàn)過(guò)程詳解

    這篇文章主要介紹了Django nginx配置實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • python使用beautifulsoup4爬取酷狗音樂(lè)代碼實(shí)例

    python使用beautifulsoup4爬取酷狗音樂(lè)代碼實(shí)例

    這篇文章主要介紹了python使用beautifulsoup4爬取酷狗音樂(lè)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python實(shí)現(xiàn)監(jiān)控鍵盤(pán)鼠標(biāo)操作示例【基于pyHook與pythoncom模塊】

    Python實(shí)現(xiàn)監(jiān)控鍵盤(pán)鼠標(biāo)操作示例【基于pyHook與pythoncom模塊】

    這篇文章主要介紹了Python實(shí)現(xiàn)監(jiān)控鍵盤(pán)鼠標(biāo)操作,結(jié)合實(shí)例形式分析了Python基于pyHook與pythoncom模塊的鍵盤(pán)、鼠標(biāo)事件響應(yīng)及日志文件操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-09-09
  • Python Scrapy框架第一個(gè)入門(mén)程序示例

    Python Scrapy框架第一個(gè)入門(mén)程序示例

    這篇文章主要介紹了Python Scrapy框架第一個(gè)入門(mén)程序,結(jié)合實(shí)例形式分析了Python Scrapy框架項(xiàng)目的搭建、抓取字段設(shè)置、數(shù)據(jù)庫(kù)保存等相關(guān)操作技巧,需要的朋友可以參考下
    2020-02-02
  • 詳解Pycharm安裝及Django安裝配置指南

    詳解Pycharm安裝及Django安裝配置指南

    這篇文章主要介紹了Pycharm安裝及Django安裝配置指南,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 解決pip?install報(bào)錯(cuò):Cannot?connect?to?proxy問(wèn)題

    解決pip?install報(bào)錯(cuò):Cannot?connect?to?proxy問(wèn)題

    這篇文章主要介紹了解決pip?install報(bào)錯(cuò):Cannot?connect?to?proxy問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python3 把一個(gè)列表按指定數(shù)目分成多個(gè)列表的方式

    Python3 把一個(gè)列表按指定數(shù)目分成多個(gè)列表的方式

    今天小編就為大家分享一篇Python3 把一個(gè)列表按指定數(shù)目分成多個(gè)列表的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 解決python彩色螺旋線繪制引發(fā)的問(wèn)題

    解決python彩色螺旋線繪制引發(fā)的問(wèn)題

    今天小編就為大家分享一篇解決python彩色螺旋線繪制引發(fā)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • python定位xpath 節(jié)點(diǎn)位置的方法

    python定位xpath 節(jié)點(diǎn)位置的方法

    今天小編就為大家分享一篇python定位xpath 節(jié)點(diǎn)位置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • OpenCV3.3+Python3.6實(shí)現(xiàn)圖片高斯模糊

    OpenCV3.3+Python3.6實(shí)現(xiàn)圖片高斯模糊

    這篇文章主要為大家詳細(xì)介紹了OpenCV3.3+Python3.6實(shí)現(xiàn)圖片高斯模糊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05

最新評(píng)論