第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Go-MySQL-Driver:帶有可變查詢參數(shù)的準(zhǔn)備好的語句

Go-MySQL-Driver:帶有可變查詢參數(shù)的準(zhǔn)備好的語句

Go
慕田峪9158850 2021-10-04 16:05:03
我想在我的 Go 服務(wù)器上對(duì) MySQL 使用準(zhǔn)備好的語句,但我不確定如何使它與未知數(shù)量的參數(shù)一起工作。一個(gè)端點(diǎn)允許用戶發(fā)送一組 id,Go 將從數(shù)據(jù)庫中選擇與給定 id 匹配的對(duì)象。這個(gè)數(shù)組可以包含 1 到 20 個(gè) ID,那么我將如何構(gòu)造一個(gè)準(zhǔn)備好的語句來處理它呢?我見過的所有示例都要求您確切知道查詢參數(shù)的數(shù)量。我能想到的唯一(非常不可能的)選項(xiàng)是準(zhǔn)備 20 個(gè)不同的 SELECT 語句,并使用與用戶提交的 id 數(shù)量相匹配的語句 - 但這似乎是一個(gè)可怕的黑客攻擊。我什至?xí)谀菚r(shí)看到準(zhǔn)備好的語句的性能優(yōu)勢嗎?我被困在這里,所以任何幫助將不勝感激!
查看完整描述

1 回答

?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

我知道沒有 RDBMS 能夠綁定未知數(shù)量的參數(shù)。永遠(yuǎn)不可能匹配具有未知數(shù)量的參數(shù)占位符的數(shù)組。這意味著沒有將數(shù)組綁定到查詢的智能方法,例如:

SELECT xxx FROM xxx WHERE xxx in (?,...,?)

這不是客戶端驅(qū)動(dòng)程序的限制,數(shù)據(jù)庫服務(wù)器根本不支持這一點(diǎn)。

有各種解決方法。

您可以使用 20 ? 創(chuàng)建查詢,綁定您擁有的值,并通過 NULL 值完成綁定。它工作正常,因?yàn)樯婕?NULL 值的比較操作的特定語義。像“field = ?”這樣的條件 當(dāng)參數(shù)綁定到 NULL 值時(shí),計(jì)算結(jié)果始終為 false,即使某些行匹配。假設(shè)您的數(shù)組中有 5 個(gè)值,數(shù)據(jù)庫服務(wù)器將必須處理 5 個(gè)提供的值,以及 15 個(gè) NULL 值。忽略 NULL 值通常足夠聰明

另一種解決方案是準(zhǔn)備所有查詢(每個(gè)查詢具有不同數(shù)量的參數(shù))。只有在參數(shù)的最大數(shù)量受到限制時(shí)才有趣。它適用于準(zhǔn)備好的語句真正重要的數(shù)據(jù)庫(例如 Oracle)。

就 MySQL 而言,使用準(zhǔn)備好的語句的收益非常有限。請(qǐng)記住,準(zhǔn)備好的語句僅在每個(gè)會(huì)話中維護(hù),它們不會(huì)跨會(huì)話共享。如果你有很多會(huì)話,它們會(huì)占用內(nèi)存。另一方面,使用 MySQL 解析語句不會(huì)涉及太多開銷(與其他一些數(shù)據(jù)庫系統(tǒng)相反)。通常,生成大量準(zhǔn)備好的語句來覆蓋單個(gè)查詢是不值得的。

請(qǐng)注意,一些 MySQL 驅(qū)動(dòng)程序提供了準(zhǔn)備好的語句接口,而它們?cè)趦?nèi)部不使用 MySQL 協(xié)議的準(zhǔn)備好的語句功能(同樣,因?yàn)橥ǔ2恢档茫?/p>

還有一些其他解決方案(例如依賴臨時(shí)表),但只有在參數(shù)數(shù)量很大時(shí)它們才有意義。


查看完整回答
反對(duì) 回復(fù) 2021-10-04
  • 1 回答
  • 0 關(guān)注
  • 280 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)