prepare statement,一種預先編譯sql指令的方式 (然後命令執行)
預處理不同於直接處理,是將要執行的sql指令先傳送給伺服器編譯,然後通過指令執行
●傳送預處理:prepare 預處理名字 from '要執行的sql指令'
●執行預處理:execute 預處理名字
預處理管理
●預處理屬於會話級別:即當前使用者當次連線有效 (斷開會被伺服器清理掉)
●刪除預處理:deallocate / drop 預處理名字
示例
#普通操作
select
*from my_stuent;
#預處理操作:傳送預處理
prepare p1 from
'select * from my_stuent'
;#預處理操作:執行預處理
execute p1;
#刪除預處理
deallocate
prepare p1;
效能優化
效率優化:同樣的sql不用每次都進行編譯(編擇耗時)
普通處理:每次都需要編譯
預處理:編譯一次
網路傳輸優化:複雜的sql指令只需要傳輸一-次
普通處理:每次都需要網路傳輸sql指令
預處理:傳輸一次sql指令,以後都是執行指令
安全:有效防止sql注入(外部通過資料的特殊使用使得sql的執行方式改變)
普通處理:直接傳送給伺服器執行(容易出現sql注入)
預處理:傳送的是結構,資料是後期執行傳入(傳入協議不一樣,資料安全性高)
在執行預處理的時候傳入預處理需要的可變資料,一般預處理都不會是固定死的sql指令,而是具有一些資料可變的執行(條件),在執行預處理的時候將實際資料傳進去代替佔位符執行sql
●可變資料的位置使用佔位符?佔位
prepare 預處理名字 from
'預處理指令 變化部分使用?替代'
;
●資料儲存到變數(預處理傳入的值必須是變數儲存的)
set @變數名 = 值;
●使用using關鍵字傳參
execute 預處理名字 using @變數名;
●資料傳入的順序與預處理中佔位符的順序一致
示例
#準備預處理:涉及引數
prepare p1 from
'insert into my_student values (?,?,?,?,?,?)'
;#設定變數並傳入引數
set@stu_id
='stu008'
;set
@stu_name
='jay'
;set
@class_id=5
;set
@gender=1
;set
@stu_height
=175
;set
@stu_age=41
;#執行預處理
execute p1 using
@stu_id
,@stu_name
,@class_id
,@gender
,@stu_height
,@stu_age
;
mysql預處理語句 MYSQL 預處理語句
一 預處理語句介紹 mysql支援服務端預處理語句,預處理語句利用高效的客戶端 服務端二進位制協議。用佔位符替換引數值的預處理語句有下列兩個好處 每次執行語句時,解析語句的開銷更小。通常,資料庫應用程式會處理大量相似的語句,只在子句中更改文字或變數值,比如查詢和刪除的where子句,更新的updat...
mysql 預處理 MySQL的預處理技術
所謂的預處理技術,最初也是由mysql提出的一種減輕伺服器壓力的一種技術!傳統mysql處理流程 1,在客戶端準備sql語句 2,傳送sql語句到mysql伺服器 3,在mysql伺服器執行該sql語句 4,伺服器將執行結果返回給客戶端 這樣每條sql語句請求一次,mysql伺服器就要接收並處理一次...
C語言再學習13 預處理(一)
名稱解釋 define 巨集定義 undef 撤銷已定義過的巨集 include 使編譯程式將另一原始檔嵌入到帶有 include 的原始檔中 if else elif endif if 的一般含義是如果 if 後面的常量表示式為 true,則編譯它與 endif 之間的 否則跳過這些 命令 end...