配置前準備html
MySQL > 6.*版本mysql
1、準備數據表
mysql 複製表結構及信息到另外一張表的sql
一、複製表結構及數據到新表
CREATE TABLE 新表 SELECT * FROM 舊錶;
二、只複製表結構到新表
CREATE TABLE 新表 SELECT * FROM 舊錶 WHERE 1=2;(即:讓WHERE條件不成立.)
CREATE TABLE 新表 LIKE 舊錶 ;(mysql4.0.25 不支持,mysql5已經支持了)
三、複製舊錶的數據到新表(假設兩個表結構同樣)
INSERT INTO 新表 SELECT * FROM 舊錶 ;
四、複製舊錶的數據到新表(假設兩個表結構不同)
INSERT INTO 新表(字段1,字段2,…….) SELECT 字段1,字段2,…… FROM 舊錶;sql
五、複製舊錶附加條件的信息
INSERT INTO 目標表 (字段1, 字段2, ...)
SELECT 字段1, 字段2, ... FROM 來源表
WHERE not exists (select * from 目標表
where 目標表.比較字段 = 來源表.比較字段);數據庫
2、全文檢索
一、MySQL全文檢索是利用查詢關鍵字和查詢列內容之間的相關度進行檢索,能夠利用全文索引來提升
匹配的速度。
二、配置條件: TABLE 須要是 MyISAM 類型的表;
col一、col2 必須是char、varchar或text類型;
col一、col2 上分別創建全文索引(FULLTEXT索引);
MySQL 配置my.ini [mysql] 下添加 ft_min_word_len = 1
-- (默認4,經過 SHOW VARIABLES LIKE 'ft_min_word_len' 可查看);
三、使用語法
SELECT * FROM tab_name WHERE MATCH ('列名1,列名2...列名n') AGAINST('詞1 詞2 詞3 ... 詞m');
即:MATCH 至關於要匹配的列,而 AGAINST 就是要找的內容。
四、檢索方式
a、天然語言檢索: IN NATURAL LANGUAGE MODE
b、布爾檢索: IN BOOLEAN MODE (經常使用)
特點:
·不剔除50%以上符合的row。
·不自動以相關性反向排序。
·能夠對沒有FULLTEXT index的字段進行搜尋,但會很是慢。
·限制最長與最短的字符串。
·套用Stopwords。
語法規則:
+ 必定要有(不含有該關鍵詞的數據條均被忽略)。
- 不能夠有(排除指定關鍵詞,含有該關鍵詞的均被忽略)。
> 提升該條匹配數據的權重值。
< 下降該條匹配數據的權重值。
~ 將其相關性由正轉負,表示擁有該字會下降相關性(但不像 - 將之排除),只是排在較後面
權重值下降。
* 萬用字,不像其餘語法放在前面,這個要接在字符串後面。
" " 用雙引號將一段句子包起來表示要徹底相符,不可拆字。
例如:
@ SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('+apple -banana' IN BOOLEAN MODE);
注:+ 表示AND,即必須包含。- 表示NOT,即必須不包含。即:返回記錄必需包含 apple,且不能包含 banner。
@ SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('apple banana' IN BOOLEAN MODE);
注:apple和banana之間是空格,空格表示OR。即:返回記錄至少包含apple、banana中的一個。
@ SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('+apple banana' IN BOOLEAN MODE);
注:返回記錄必須包含apple,同時banana可包含也可不包含,若包含的話會得到更高的權重
@ SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('+apple ~banana' IN BOOLEAN MODE);
注:~ 是咱們熟悉的異或運算符。返回記錄必須包含apple,若也包含了banana會下降權重。
可是它沒有 +apple -banana 嚴格,由於後者若是包含banana壓根就不返回。
@ SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('+apple +(>banana <orange)' IN BOOLEAN MODE);
注:返回必須同時包含「apple banana」或者必須同時包含「apple orange」的記錄。
若同時包含「apple banana」和「apple orange」的記錄,則「apple banana」的權重高於「apple orange」的權重。
c、查詢擴展檢索: WITH QUERY EXPANSION
3、注意事項:
一、預設搜尋是不分大小寫,若要分大小寫,columne 的 character set要從utf8改爲utf8_bin。
二、預設 MATCH...AGAINST 是以相關性排序,由高到低。
三、MATCH(title, content)裏的字段必須和FULLTEXT(title, content)裏的字段如出一轍。
若是隻要單查title或content一個字段,那得另外再建一個 FULLTEXT(title) 或 FULLTEXT(content),也由於如此,MATCH()
的字段不能跨table。
四、MySQL不支持中文全文索引,緣由很簡單:與英文不一樣,中文的文字是連着一塊兒寫的,中間沒有MySQL能找到分詞的地方;
若是你的MySQL是安裝在Windows平臺上的,能夠不用轉碼直接存儲中文就可使用全文索引。
可是若是你的MySQL是安裝在Linux上的則須要進行轉編碼(urlencode / base64_encode / json_encode / 區位 / 拼音)等進行
編碼使之以「字母+數字」 的方式存儲於數據庫中。
五、InnoDB 在 MySQL5.6 以後新引入了引擎對FULLTEXT索引的支持,以前只有MyISAM引擎支持FULLTEXT索引。
***** 也就是MySQL5.6以後的版本對數據表的類型不作要求了,均可以使用。json
文章參考:http://www.cnblogs.com/martinzhang/p/3220345.htmlapp