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这个短语而不是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的行降低后者的等级 全文本搜索使用说明: 1 在索引全文本数据时,短语被忽略且从索引中排除,短语定义为那些具有3个或3个以下字符的词,如果需要,这个数目可以更改 2 mysql内建一个非用词(stopword)列表,这些词在索引全文本数据时总是被忽略,如果需要,可以覆盖这个列表 3 许多词出现的频率高,搜索它们没有用处(返回太多的结果),因此mysql规定了一条50%的规则,如果一个词出现在50%以上的行中,则它将作为一个非用词忽略,50%规则不适用与IN BOOLEAN MODE 4 如果表中的行数少于3行,则全文本搜索不返回结果(因为每个词或者不出现,或者少于出现在50%的行中) 5 忽略词中的单引号,例如 don't 索引为 dont 6 不具有词分隔符(包含日语和汉语)的语言不能恰当地返回全文本搜索结果 7 如前所述,仅在MyISAM数据库引擎中是支持全文本搜索的 MySQL必知必会笔记(五)插入数据 创建和操纵表 第十九章 插入数据 INSERT是用来插入(或添加)行到数据库表的。插入数据的几种方式: 1 插入完整的行 2 插入行的一部分 3 插入多行 4 插入某些查询结果 INSERT SELECT语句 INSERT INTO customers(cust_id,cust_name,cust_email) SELECT cust_id,cust_name,cust_email FROM custnew; 列省略 如果表中定义允许,则可以在INSERT操作中省略某些列,省略的列必须满足以下某个条件。 1 该列定义为允许为NULL 2 在表定义中给出默认值, 提高整体性能 数据库经常多个客户访问,对处理什么请求以及用什么次序处理进行管理mysql的任务。INSERT操作可能很耗时(特别是由很多索引需要更新时),而且它可能降低等待处理的SELECT语句性能。 如果数据检索是最重要的(通常是这样的),则你可以通过在INSERT 和INTO之间添加关键字 LOW_PRIORITY 指示mysql降低INSERT语句的优先集 第二十章 更新和删除数据 更新和删除数据 为了更新(修该)表中的数据,可使用UPDATE语句,可采用两种方式使用UPDATE 1 更新表中特定的行 2 更新表中所有的行 更新行和删除行的时候一定要加上WHERE子句,否则后果自负 UPDATE bname SET zda = 'acontent' , zdb = 'bcontent' WHERE zdid='20005'; IGNORE 关键字 如果使用UPDATE更新多行,并且在更新这些行中的一行或多行时出现一个错误,则整个UPDATE操作被取消,(错误发生前更新的所有行被恢复到他们原来的值)为即使发生错误也继续进行更新。可使用IGNORE关键字 UPDATE IGNORE bname; 删除数据 为了从表中删除(去掉)数据,使用DELETE语句,可以使用两种方式: 1 从表中删除特定的行 2 从表中删除所有的行 不要省略WHERE子句 更快的删除 如果想从表中删除所有的行,不要使用DELETE,可以使用TRUNCATE TABLE语句,他完成相同的工作,但速度更快(TRUNCATE实际上是删除原来的表并重新创建一个表,而不是逐行去删除表中的数据) 更新和删除的指导原则 下面是许多sql程序员使用的UPDATE或DELETE是所遵循的习惯 1 除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。 2 保证每个表都有主键,尽可能的像WHERE子句那样使用它(可以指定各主键、多个值、和值的范围) 3 在对UPDATE和DELETE语句操作使用WHERE前,应该先用SELECT进行测试,保证它过滤的数据是正确的记录,以防编写的WHERE子句不正确。 4 使用强制实施引用完整的数据库,这样MYSQL将不允许删除具有与其他表相关联的数据的行 第二十一章 创建和操纵表 创建表 一般两种创建表的方法 1 使用具有交互式创建和管理表的工具 2 表也可以直接用MySQL语句操纵 在使用交互式工具时,工具也是生成MySQL语句操纵数据库 表创建基础 为了利用CREATE TABLE创建表,必须给出下列信息: 1 新表的名字,在关键字CREATE TABLE之后给出 2 表列的名字和定义,用逗号分隔 CREATE TABLE table ( column_id int NOT NULL AUTO_INCRMENT, columnOne char(20) NOT NULL DEFAULT 1, columnOne char(20) NOT NULL , column char(20) NOT NULL , ..... PRIMARY KEY ( column_id) ) ENGINE = InnoDB 如果表已经存在,则必须先删除后在创建他,不可以直接覆盖。如果仅想在表没有存在的情况下创建它,应该在表名后给出 IF NOT EXISTS 使用NULL值 如果不指定列为NOT NULL则它默认是NULL