Mysql

在儲存過程中使用準備好的語句的好處?

  • October 20, 2020

除了幫助避免 SQL 注入之外,在儲存過程中使用準備好的語句有什麼好處(如果有的話)(假設查詢在過程中只執行一次)?

引擎有沒有辦法將準備好的語句保存在記憶體中,或者它是一個清洗?

如果答案取決於環境,我對帶有 innodb 的 mysql 感興趣。

所以是的,正如你提到的關於 SQL 注入的另一個優點是你猜到的。

引用文件

對參數值使用帶有佔位符的預處理語句具有以下好處:

  • 每次執行語句時解析語句的成本更少。通常,數據庫應用程序處理大量幾乎相同的語句,只更改子句中的文字或變數值,例如用於查詢和刪除的 WHERE、用於更新的 SET 和用於插入的 VALUES。
  • 防止 SQL 注入攻擊。參數值可以包含未轉義的 SQL 引號和分隔符。

所以是的,它確實記憶體了準備好的語句和常式。

引擎有沒有辦法將準備好的語句保存在記憶體中,或者它是一個清洗?

準備好的語句儲存在記憶體中,直到顯式DEALLOCATE語句或連接終止,如果它沒有被破壞,則可以在同一連接中重用 - 包括在另一個簡單或複合語句中。

通過 SELECT 類型的準備語句獲得的查詢結果在通用的基礎上儲存在查詢記憶體中,獨立於查詢的源類型,並且可以通過該或另一個準備語句的另一個執行以及當其文本與 SQL 相同時直接查詢來重用第一個準備好的語句的文本。

引用自:https://dba.stackexchange.com/questions/110628