文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  HANDLER 語法

15.2.5 HANDLER 語法

HANDLER tbl_name OPEN [ [AS] alias]

HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
    [ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
    [ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ { FIRST | NEXT }
    [ WHERE where_condition ] [LIMIT ... ]

HANDLER tbl_name CLOSE

HANDLER 語法提供對資料表儲存引擎介面的直接存取。它適用於 InnoDBMyISAM 資料表。

HANDLER ... OPEN 語法會開啟一個資料表,使其可使用後續的 HANDLER ... READ 語法存取。此資料表物件不會被其他工作階段共用,且在工作階段呼叫 HANDLER ... CLOSE 或工作階段終止之前不會關閉。

如果您使用別名開啟資料表,則後續使用其他 HANDLER 語法對開啟資料表的參考必須使用別名,而不是資料表名稱。如果您未使用別名,而是使用以資料庫名稱限定的資料表名稱開啟資料表,則後續參考必須使用未限定的資料表名稱。例如,對於使用 mydb.mytable 開啟的資料表,後續參考必須使用 mytable

第一種 HANDLER ... READ 語法會取得符合指定值和滿足 WHERE 條件的索引列。如果您有多欄索引,請將索引欄位值指定為逗號分隔的清單。您可以為索引中的所有欄位指定值,也可以為索引欄位的最左側前綴指定值。假設索引 my_idx 依序包含三個名為 col_acol_bcol_c 的欄位。 HANDLER 語句可以為索引中的所有三個欄位指定值,也可以為最左側前綴中的欄位指定值。例如:

HANDLER ... READ my_idx = (col_a_val,col_b_val,col_c_val) ...
HANDLER ... READ my_idx = (col_a_val,col_b_val) ...
HANDLER ... READ my_idx = (col_a_val) ...

若要使用 HANDLER 介面來參照資料表的 PRIMARY KEY,請使用加上引號的識別符號 `PRIMARY`

HANDLER tbl_name READ `PRIMARY` ...

第二種 HANDLER ... READ 語法會從資料表中,以符合 WHERE 條件的索引順序取得一列。

第三種 HANDLER ... READ 語法會從資料表中,以符合 WHERE 條件的自然列順序取得一列。當需要完整資料表掃描時,它比 HANDLER tbl_name READ index_name 更快。自然列順序是資料列儲存在 MyISAM 資料表資料檔案中的順序。此語句也適用於 InnoDB 資料表,但由於沒有單獨的資料檔案,因此沒有這種概念。

如果沒有 LIMIT 子句,所有形式的 HANDLER ... READ 都會在有可用的情況下取得單一列。若要傳回特定數量的列,請包含 LIMIT 子句。它的語法與 SELECT 語句相同。請參閱 第 15.2.13 節,「SELECT 語句」

HANDLER ... CLOSE 會關閉以 HANDLER ... OPEN 開啟的資料表。

使用 HANDLER 介面而不是一般的 SELECT 語句有幾個原因:

  • HANDLERSELECT 快。

    • 會為 HANDLER ... OPEN 配置指定的儲存引擎處理常式物件。該物件會重複用於該資料表的後續 HANDLER 語句;不需要為每個語句重新初始化。

    • 牽涉到的剖析較少。

    • 沒有最佳化工具或查詢檢查的額外負荷。

    • 處理常式介面不必提供資料的一致外觀(例如,允許髒讀),因此儲存引擎可以使用 SELECT 通常不允許的最佳化。

  • HANDLER 使移植到使用低階 ISAM 類型介面的 MySQL 應用程式更容易。

  • HANDLER 使您能夠以 SELECT 難以(甚至不可能)實現的方式遍歷資料庫。當使用為資料庫提供互動式使用者介面的應用程式時,HANDLER 介面是查看資料的更自然方式。

HANDLER 是一個有點低階的語句。例如,它不提供一致性。也就是說,HANDLER ... OPEN 會取得資料表的快照,也會鎖定資料表。這表示在發出 HANDLER ... OPEN 語句後,資料表資料可能會被修改(透過目前的工作階段或其他工作階段),而這些修改可能只對 HANDLER ... NEXTHANDLER ... PREV 掃描部分可見。

可以關閉並標記為重新開啟的開啟處理常式,在這種情況下,處理常式會失去其在資料表中的位置。當以下兩種情況皆為真時,就會發生這種情況:

  • 任何工作階段在處理常式的資料表上執行 FLUSH TABLES 或 DDL 語句。

  • 開啟處理常式的工作階段執行使用資料表的非 HANDLER 語句。

對資料表使用 TRUNCATE TABLE 會關閉以 HANDLER OPEN 開啟的資料表的所有處理常式。

如果使用 FLUSH TABLES tbl_name WITH READ LOCK 清除資料表,而該資料表是使用 HANDLER 開啟的,則處理常式會被隱含地清除並失去其位置。