標籤:處理 進階 之間 exp mode 正則 比較 程式 sele
本人最近看了一本有關於MySQL的書籍《MySQL必知必會》,書中唯寫了一些基本知識,但是也基本涵蓋了所有的MySQL的知識點。其餘的比較進階的也只是在基礎上進行擴充或者是最佳化,看完這本書之後,本人也有一點疑惑,所以知道的朋友幫忙解決一下
1、MySQL的引擎分類
InnoDB,MyISAM以及MEMORY等3個引擎。
InnoDB是一個可靠的交易處理引擎,但是其不支援全文本搜尋。
MEMORY在功能上等同於MyISAM,但由於資料存放區在記憶體中,速度很快。
MyISAM是一個效能極高的引擎,它支援全文本搜尋,但是不支援交易處理。
2、談談MyISAM的全文本搜尋。
MyISAM的全文本搜尋不像InnoDB中使用的like文法,搜尋某一列,而是搜尋全文本,只要有符合的都可以顯示出來。它的基本格式如下:
Match(匹配的列名) Against(搜尋的運算式)
(1)、基本文法:
SELECT columnName
FROM TABLENAME
WHERE MATCH(查詢列) Against (‘anvils’ WITH QUERY EXPANSION)(這就是查詢擴充)
由於搜尋全文本,只要其中一個詞符合所要求的都會被顯示的,所以一般結果不是唯一的。他們會按照一定的順序進行排列,主要是根據查詢的優先順序,以及你搜尋 的關鍵詞之間的位置。位置越近,優先順序越高。
(2)布爾類型文本搜尋
舉例:
select note_text
from product
where Match(note_text) Against(‘heavy ‘ IN BOOLEAN MODE)
其中的 heavy為搜尋的關鍵字。IN BOOLEAN MODE即為布爾文本類型的標誌。
Against(‘heavy - rope*‘ IN BOOLEAN MODE)表示搜尋出來行的結果去除含有rope的行
Against(‘ +rabbit + bait‘ IN BOOLEAN MODE)顯示包含rabbit和bait的行
Against(‘rabbit + bait‘ IN BOOLEAN MODE) 顯示包含rabbit和bait中任意一個的行
Against(‘rabbit bait‘ IN BOOLEAN MODE) 顯示rabbit bait短語的行。
這裡我提出一個問題:為什麼InnoDB不支援全文本搜尋,這就涉及到引擎內部的問題,希望大家給我回覆。
3、RegexREGXEP
本人在看這本書之前,學過SQL SERVER資料庫。但是當時沒有學到Regex。後來在生活中遇到過幾次,才有所瞭解。
regexp的英文意思就是Regex的意思。所以學習英語對於一個程式員來說,是必不可少的。我們有時候通過一個簡稱便能知道這個是什麼,我自己就有親身體會。
這裡我要說的是Regex匹配特殊字元。當Regex匹配特殊字元時,必須要加上逸出字元“\\”作為前置。
?是匹配當前的前面的任何字元的0次或1次出現。
4、視圖
視圖為虛擬表。主要用來資料的檢索,其對select 語句進行封裝,保護一些使用者的基本資料。但是本人還是不夠瞭解視圖的使用。
5、遊標(CURSOR)
遊標的使用步驟:
定義——聲明——使用——關閉
CREATE PROCEDURE C()
BEGIN
DECLARE 遊標名 CURSOR
FOR
SELECT _ FROM _;
END
上面就是建立遊標的過程
OPEN CURSOR ,CLOSE CURSOR 也就是開啟和關閉遊標的操作。
以上最近所學的就是這些,希望上面的紅色標註的問題,希望有人回答下。這些基本的知識對於我們想要瞭解MySQL的人來說很重要,還有一些我們所不知道的。也會繼續瞭解深入。等待著我的後續資料庫知識,讓我們一起成長。
MySQL的一點淺顯知識