配置前准备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