连接
主机名 端口 一个合法用户 用户口令
Mysql -u root -p -h myserver -P 9999
选择数据库
可使用USE关键字,mysql语言组成部分的一个关键字,绝不要使用关键字命名一个表或列
USE dataname;
显示数据库列表
SHOW DATABASES;
一个数据库内的表的列表(USE进入数据库的情况下)
SHOW TABLES;
SHOW也可以用来显示表列
SHOW COLUMNS FROM column;
DESCRIBE 是SHOW COLUMNS的一种快捷方式;DESCRIBE cust;
其他的SHOW 语句
SHOW STATUS 显示广泛的服务器状态信息
SHOW CREATE DATABASE 显示创建特定数据库的MYSQL语句
SHOW CREATE TABLE 显示创建特定表的MYSQL语句
SHOW GRANTS 显示授权用户的安全权限
SHOW ERRORS 显示服务器的错误信息
SHOW WARNINGS 显示服务器的警告信息
限制结果条数
sql语句后面加入下面sql语句
LIMIT 5 显示结果的前5条
LIMIT 3,4 从行3开始的后4行
LIMIT 4 OFFSET 3 从行3开始的后4行
用正则表达式进行搜索(仅支持正则表达式的一小部分)
基本字符匹配
检索列prod_name包含1000 的所有行
SELECT columnOne FROM table WHERE columnOne REGEXP '1000' ORDER BY columnOne
. 匹配任意一个字符1000 2000 3000 a000
SELECT columnOne FROM table WHERE columnOne REGEXP '.000' ORDER BY columnOne
正则匹配不区分大小写 ,如想区分匹配可在REGEXP 后面加上BINARY关键字
进行OR匹配
为搜索两个或n个字符串之一
SELECT columnOne FROM table WHERE columnOne REGEXP '1000|2000|3000' ;
匹配单个字符
SELECT columnOne FROM table WHERE columnOne REGEXP '[123] Ton'; //匹配1 Ton 或2 Ton或3 Ton
当有非匹配的内容时使用[],它是 | 的另一种形式,如1|2|3 Ton这时匹配的只有3带有Ton
如果想要得到非匹配的内容可以使用[^123]的形式
匹配范围 [0-9] [a-z][A-Z]
SELECT columnOne FROM table WHERE columnOne REGEXP '[1-5] Ton' ;
匹配特殊字符
想要匹配 . [ ] | 这些字符串怎么办呢,可以在这些字符前加 \\ 进行转义,第一个\ mysql自己解释,第二个给正则解释的
元字符 说明
\\\ \
\\f 换页
\\n 换行
\\r 回车
\\t 制表
\\v 纵向制表
使用全文本搜索
启用全文本搜索
一般在创建表时启用全文本搜索。CREATE TABLE语句接受FULLTEXT子句。它给出被索引列的一个逗号分隔的列表。
CREATE TABLE productontes
(
note_id int NOT_NULL AUTO_INCREMENT,
prod_id char(10) NOT_NULL,
note_date datetime NOT_NULL,
note_text text NOT_NULL,
PRIMARY KEY(note_id),
FULLTEXT(note_text)
)ENGINE=MyISAM;
为了进行全文本搜索,mysql根据子句FULLTEXT(note_text)的指示对它进行索引。这里FUNLL_TEXT索引了单个列,如果需要可以索引多个列,多列之间用逗号分隔
在定义之后mysql对自动维护该索引,在增加、更新和删除行时,索引随之自动更新。
不要在导入数据时使用FUNLLTEXT,否则会耗费很多时间,应该先导入数据,再定义FULLTEXT这样有助于更快的导入数据
进行全文本搜索
在索引之后,使用两个函数Match()和Against()执行全文本搜索,其中Match()指定被搜索的列Against()指定要使用的搜索表达式。
SELECT note_text FROM productnotes WHERE Match(note_text) Against('rabbit');
使用完整的Match()说明: 传递给Match()的值必须和与FULLTEXT()定义中的相同。如果指定了多个列,则必须列出它们(而且次序正确)
除非使用BINARY方式,否则全文本搜索不区分大小写
使用SELECT 语句同样可以检索出两行,但次序不同。
全文本搜索返回一文本匹配的良好程度的数据。具有较高等级的行先返回。
使用查询扩展
查询扩展用来设法放宽所返回的全文本搜索结果的范围。想找出与搜索有关的其他行。不包含要搜索才字母。
如SELECT note_text FROM productnotes WHERE Match(note_text) Against('anvils');
返回一行数据
使用查询扩展
SELECT note_text FROM productnotes
WHERE Match(note_text) Against('anvils' WITH QUERY EXPANSION);
返回7行
布尔文本搜索
Mysql支持全文本搜索的另一种形式,称为布尔方式。布尔方式可以提供以下细节:
1 要匹配的词
2 要排斥的词(如果该行包含这个词,则不返回该行,即使它已经包含指定的词也是如此)
3 排列提示(指定某些词比其他词重要,更重要的词的词等级更高)
4 表达式分组
5 另外一些内容
即使没有FULLTEXT索引也可以使用 布尔方式不同迄今为止使用的全文本搜索语法的地方在于,即使没有定义FULLTEXT索引,也可以使用它,但这是一种非常缓慢的操作(其性能将随着数据量的增加而降低)
例如:匹配包含heavy但不包含任意以rope开始的词的行,可以使用以下查询:
SELECT note_text FROM productnotes
WHERE Match(note_text) Against('heavy -rope*' IN BOOLEAN MODE)
全文本布尔操作符
+ 包含,词必须存在
- 排除,词必须不出现
> 包含,而且增加等级值
< 包含,而且减少等级值
() 吧词组成子表达式(允许这些子表达式作为一个组被包含)
~ 取消一个词的排序值
* 词尾的通配符
"" 定义一个短语,(与单词不一样,它匹配整个短语以便包含或排除这个短语)
SELECT note_text FROM productnotes
WHERE Match(note_text) Against('+hea +rop' IN BOOLEAN MODE)
//包含hea 和rop的行
SELECT note_text FROM productnotes
WHERE Match(note_text) Against('hea rop' IN BOOLEAN MODE)
//包含hea 和rop至少一个就行的行
SELECT note_text FROM productnotes
WHERE Match(note_text) Against('"hea rop"' IN BOOLEAN MODE)
//包含hea rop这个短语而不是hea 和rop的行
SELECT note_text FROM productnotes
WHERE Match(note_text) Against('>hea 
//包含hea 和rop的行,增加前者的等级,降低后者的等级
SELECT note_text FROM productnotes
WHERE Match(note_text) Against('+hea +(
//包含hea 和rop的行降低后者的等级