最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL查詢重寫插件的使用

 更新時(shí)間:2020年11月11日 09:49:31   作者:AsiaYe  
這篇文章主要介紹了MySQL查詢重寫插件的使用,幫助大家更好的理解和維護(hù)數(shù)據(jù)庫(kù),感興趣的朋友可以了解下

查詢重寫插件

從MySQL 5.7.6開(kāi)始,MySQL Server支持查詢重寫插件,可以在服務(wù)器執(zhí)行之前檢查并可能修改服務(wù)器接收的語(yǔ)句。

以下是官方文檔介紹:

  預(yù)解析重寫插件具有以下特點(diǎn):

1.該插件允許在服務(wù)器處理之前重寫到達(dá)服務(wù)器的SQL語(yǔ)句。

2.該插件接收一個(gè)語(yǔ)句字符串,并可能返回一個(gè)不同的字符串。

后解析查詢重寫插件具有以下特征:

  1.該插件支持基于解析樹(shù)的語(yǔ)句重寫。

  2.服務(wù)器解析每個(gè)語(yǔ)句并將其解析樹(shù)傳遞給插件,插件可以遍歷樹(shù)。插件可以將原始樹(shù)返回到服務(wù)器以進(jìn)行進(jìn)一步處理,或者構(gòu)造不同的樹(shù)并返回該樹(shù)。

通俗來(lái)講,是指該插件支持兩種重寫方式,一種是在語(yǔ)法解析之前,直接修改SQL字符串,一種是在語(yǔ)法解析之后,通過(guò)操控語(yǔ)法解析樹(shù)來(lái)進(jìn)行重寫。這個(gè)特性還是非常有用的,例如錯(cuò)誤的上線了某個(gè)SQL,但由于無(wú)法走到索引導(dǎo)致全庫(kù)查詢; 或者你可能使用某個(gè)第三方的已編譯好的軟件,但SQL可能執(zhí)行錯(cuò)誤,你又無(wú)法直接修改應(yīng)用,這個(gè)特性將會(huì)非常有用,還可以去編寫符合用戶要求的插件。

安裝或卸載

最簡(jiǎn)單的安裝過(guò)程如下:

shell> mysql -u root -p < install_rewriter.sql Enter password: (enter root password here)

可以發(fā)現(xiàn),在數(shù)據(jù)庫(kù)中多增加了一個(gè)庫(kù)query_rewrite,查看該數(shù)據(jù)庫(kù):

查看插件當(dāng)前是否安裝:

實(shí)踐操作

例如為如下語(yǔ)句強(qiáng)制使用主鍵查詢:

SELECT DBA_no, name from DBA_inf where DBA_no = ?

改寫成:

SELECT DBA_no, name from DBA_inf force index(primary) where DBA_no = ?

要為Rewriter插件添加規(guī)則,具體步驟分為兩步:

1.向rewrite_rules表中添加相應(yīng)的規(guī)則;

2.調(diào)用flush_rewrite_rules()存儲(chǔ)過(guò)程以將表中的規(guī)則加載到插件中。

以下示例創(chuàng)建一個(gè)簡(jiǎn)單規(guī)則來(lái)匹配選擇單個(gè)文字值的語(yǔ)句,執(zhí)行的操作:

insert into query_rewrite.rewrite_rules(pattern, replacement, pattern_database) values ("SELECT DBA_no, name from DBA_inf where DBA_no = ?","SELECT DBA_no, name from DBA_inf force index(primary) where DBA_no = ?","DBAs");

查詢剛剛插入的規(guī)則:

輸出的規(guī)則每一列的內(nèi)容如下:

id:

規(guī)則ID。此列是表主鍵??梢允褂迷揑D唯一標(biāo)識(shí)任何規(guī)則。

pattern:

指示規(guī)則匹配的語(yǔ)句模式的模板,使用?表示匹配的數(shù)據(jù)值。

pattern_database:

該數(shù)據(jù)庫(kù)用于匹配語(yǔ)句中的非限定表名。如果相應(yīng)的數(shù)據(jù)庫(kù)和表名相同,則語(yǔ)句中的限定表名與模式中的限定名匹配;當(dāng)默認(rèn)數(shù)據(jù)庫(kù)pattern_database與表名相同且語(yǔ)句名相同時(shí),語(yǔ)句中的非限定表名才匹配模式中的非限定名稱 。

replacement:

指示如何重寫與pattern列值匹配的語(yǔ)句的模板。使用 ?表示匹配的數(shù)據(jù)值,?是參數(shù)標(biāo)記,實(shí)際語(yǔ)句中可以替換。

enabled:

規(guī)則是否已啟用。加載操作(通過(guò)調(diào)用flush_rewrite_rules() 存儲(chǔ)過(guò)程執(zhí)行)Rewriter僅在此列加載時(shí)才將表中的規(guī)則加載到 內(nèi)存緩存中YES。此列可以在不刪除規(guī)則的情況下停用規(guī)則:將列設(shè)置為除YES表之外的值 ,然后將表重新加載到插件中。

message:

該插件使用此列與用戶進(jìn)行通信。如果將規(guī)則表加載到內(nèi)存中時(shí)沒(méi)有發(fā)生錯(cuò)誤,則插件會(huì)將message 列設(shè)置為NULL。非NULL值表示錯(cuò)誤,列內(nèi)容是錯(cuò)誤消息。在這些情況下可能會(huì)發(fā)生錯(cuò)誤:1.模式或替換是一個(gè)產(chǎn)生語(yǔ)法錯(cuò)誤的錯(cuò)誤SQL語(yǔ)句。2.替換包含比模式更多的參數(shù)標(biāo)記。如果發(fā)生加載錯(cuò)誤,插件還會(huì)將 Rewriter_reload_error狀態(tài)變量設(shè)置為ON。

pattern_digest:

此列用于調(diào)試和診斷。如果在將規(guī)則表加載到內(nèi)存中時(shí)該列存在,則插件會(huì)使用模式摘要更新它。此列可幫助確定某些語(yǔ)句無(wú)法重寫的原因。

normalized_pattern

此列用于調(diào)試和診斷。如果在將規(guī)則表加載到內(nèi)存中時(shí)該列存在,則插件會(huì)使用模式的規(guī)范化形式對(duì)其進(jìn)行更新。如果您嘗試確定某些語(yǔ)句無(wú)法重寫的原因,則此列可能很有用。

重寫器查詢重寫插件過(guò)程

將規(guī)則添加到 rewrite_rules表中不足以使Rewriter插件使用該規(guī)則。還必須調(diào)用flush_rewrite_rules()以將表內(nèi)容加載到插件內(nèi)存緩存中:

Rewriter插件操作使用存儲(chǔ)過(guò)程將規(guī)則表加載到其內(nèi)存緩存中,在正常操作下,用戶僅調(diào)用flush_rewrite_rules()從而將rewrite_rules表的內(nèi)容加載到Rewriter內(nèi)存高速緩存中。加載表后,它還會(huì)清除查詢緩存。

當(dāng)修改規(guī)則表后,需要重新調(diào)用此過(guò)程以使插件從新表內(nèi)容更新其緩存:

使用重寫插件中定義的語(yǔ)句模式查詢相應(yīng)記錄:

SELECT DBA_no, name from DBA_inf where DBA_no =8;

通過(guò)使用explain語(yǔ)句查看,當(dāng)前SQL已經(jīng)使用了索引

重寫插件操作信息

該Rewriter插件通過(guò)幾個(gè)狀態(tài)變量提供有關(guān)其操作的信息:

有關(guān)這些變量的說(shuō)明:

  • Rewriter_number_loaded_rules:成功從rewrite_rules表中加載到內(nèi)存中以供Rewriter 插件使用的重寫插件重寫規(guī)則的數(shù)量。
  • Rewriter_number_reloads:rewrite_rules被加載到Rewriter插件緩存中的次數(shù)。
  • Rewriter_number_rewritten_queries:Rewriter查詢重寫插件自加載以來(lái)重寫的查詢數(shù) 。
  • Rewriter_reload_error:是否在最近將rewrite_rules表加載到Rewriter 插件使用的內(nèi)存高速緩存中時(shí)發(fā)生錯(cuò)誤 。如果值為OFF,則不會(huì)發(fā)生錯(cuò)誤。如果值為,則ON發(fā)生錯(cuò)誤;檢查表的message列rewriter_rules是否有錯(cuò)誤消息。

通過(guò)調(diào)用flush_rewrite_rules()存儲(chǔ)過(guò)程加載規(guī)則表時(shí) ,如果某些規(guī)則發(fā)生錯(cuò)誤,則該CALL 語(yǔ)句會(huì)產(chǎn)生錯(cuò)誤,并且該插件會(huì)將 Rewriter_reload_error狀態(tài)變量設(shè)置為ON:

在這種情況下,請(qǐng)檢查rewrite_rules表中是否包含非NULL message列值的行,以查看存在的問(wèn)題。

重寫器插件使用字符集

當(dāng)rewrite_rules表加載到Rewriter插件中時(shí),插件使用character_set_client系統(tǒng)變量的當(dāng)前全局值來(lái)解釋語(yǔ)句 。如果character_set_client隨后更改全局 值,則必須重新加載規(guī)則表。

客戶端的會(huì)話character_set_client值必須 與加載規(guī)則表時(shí)的全局值相同,否則規(guī)則匹配將不適用于該客戶端。

以上就是MySQL查詢重寫插件的使用的詳細(xì)內(nèi)容,更多關(guān)于MySQL查詢重寫插件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mysql正確安全清空在線慢查詢?nèi)罩緎low log的流程分享

    mysql正確安全清空在線慢查詢?nèi)罩緎low log的流程分享

    這篇文章主要介紹了正確安全清空在線慢查詢?nèi)罩緎low log的流程,需要的朋友可以參考下
    2014-02-02
  • mysql5.7.17 zip 解壓安裝詳細(xì)過(guò)程

    mysql5.7.17 zip 解壓安裝詳細(xì)過(guò)程

    這篇文章主要為大家詳細(xì)介紹了mysql5.7.17 zip 解壓安裝詳細(xì)過(guò)程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • MySQL表級(jí)鎖使用說(shuō)明

    MySQL表級(jí)鎖使用說(shuō)明

    這篇文章主要為大家介紹了MySQL表級(jí)鎖使用說(shuō)明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • MySQL數(shù)據(jù)類型和常用字段屬性總結(jié)

    MySQL數(shù)據(jù)類型和常用字段屬性總結(jié)

    這篇文章主要介紹了MySQL數(shù)據(jù)類型和常用字段屬性總結(jié),本文總結(jié)了日期和時(shí)間數(shù)據(jù)類型、數(shù)值數(shù)據(jù)類型、字符串?dāng)?shù)據(jù)類型等,需要的朋友可以參考下
    2014-09-09
  • mysql并發(fā)控制原理知識(shí)點(diǎn)

    mysql并發(fā)控制原理知識(shí)點(diǎn)

    在本篇文章里小編給大家整理的是一篇關(guān)于mysql并發(fā)控制原理知識(shí)點(diǎn)內(nèi)容,需要的朋友們參考下吧。
    2020-02-02
  • DQL命令查詢數(shù)據(jù)實(shí)現(xiàn)方法詳解

    DQL命令查詢數(shù)據(jù)實(shí)現(xiàn)方法詳解

    DQL(Data?Query?Language,數(shù)據(jù)查詢語(yǔ)言),查詢數(shù)據(jù)庫(kù)數(shù)據(jù),如SELECT語(yǔ)句,簡(jiǎn)單的單表查詢或多表的復(fù)雜查詢和嵌套查詢,數(shù)據(jù)庫(kù)語(yǔ)言中最核心、最重要的語(yǔ)句,使用頻率最高的語(yǔ)句
    2022-09-09
  • 解決MySQL登錄報(bào)錯(cuò)1045-Access?denied?for?user?'root'@' '(using?password:YES)

    解決MySQL登錄報(bào)錯(cuò)1045-Access?denied?for?user?'root'@

    這篇文章主要給大家介紹了關(guān)于解決MySQL登錄報(bào)錯(cuò)1045-Access?denied?for?user?‘root‘@‘‘(using?password:YES)的相關(guān)資料,文中一步步將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • MySQL的重裝問(wèn)題解決方法

    MySQL的重裝問(wèn)題解決方法

    最近在工作上遇到了MySQL重裝的問(wèn)題,今天記錄一下我的解決過(guò)程。不論我用控制面板的卸載刪除程序方式還是安全衛(wèi)士的卸載,都會(huì)遇到一個(gè)問(wèn)題,就是安裝到如下圖位置,server start時(shí)就程序無(wú)響應(yīng)了,一直死在那里
    2013-04-04
  • mysql server is running with the --skip-grant-tables option

    mysql server is running with the --skip-grant-tables option

    今天在mysql中新建數(shù)據(jù)庫(kù)提示The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement,原來(lái)是數(shù)據(jù)中配置的--skip-grant-tables,這樣安全就降低了,這個(gè)一般當(dāng)忘記root密碼的時(shí)候需要這樣操作
    2017-07-07
  • 探討:sql插入空,默認(rèn)1900-01-01 00:00:00.000的解決方法詳解

    探討:sql插入空,默認(rèn)1900-01-01 00:00:00.000的解決方法詳解

    本篇文章是對(duì)sql插入空,默認(rèn)1900-01-01 00:00:00.000的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06

最新評(píng)論

襄樊市| 自贡市| 蓝田县| 望谟县| 高雄县| 竹山县| 呼图壁县| 敖汉旗| 灯塔市| 建水县| 资源县| 罗源县| 凤山市| 西峡县| 惠来县| 石阡县| 荥经县| 阿荣旗| 乌兰县| 曲松县| 临泽县| 彭州市| 长岭县| 汤原县| 德兴市| 井陉县| 察雅县| 锡林浩特市| 靖边县| 镇坪县| 姚安县| 玛沁县| 舟曲县| 平潭县| 沙坪坝区| 青阳县| 明水县| 德钦县| 邢台县| 莎车县| 吴川市|