数据库学习Day5——全文搜索(Boolean模式)+表单锁定

测试表单(fulltext_sample):
+---------------------------+
| copy                      |
+---------------------------+
| It appears good from here |
| The fureture and the past |
| I love you                |
| All you need is love      |
| A good teacher            |
+---------------------------+

在mySQL中支持另外一种更为复杂模式搜索——Boolean模式,执行Boolean模式
搜索,语法和全文搜索相同,只是需要在AGAINST子句中加入IN BOOLEAN MODE:
SELECT COPY FROM fulltext_sample WHERE MATCH(copy)
AGAINST('+good -teacher' IN BOOLEAN MODE);
其中'+'表示搜索内容中包括,而'-'则表示搜索内容中不包括,结果为:
+---------------------------+
| copy                      |
+---------------------------+
| It appears good from here |
+---------------------------+
"A good teacher"这一项没有被搜索到。有趣的是如果+后面的内容和-后面的内容在所有内容中都
存在的话,那么搜索的只是含有前面设定的匹配词的内容,例如:
SELECT COPY FROM fulltext_sample WHERE MATCH(copy)
AGAINST('+love -you' IN BOOLEAN MODE);
love和you在含有love的内容中都有,结果把含有'love'给搜索出来了:
+----------------------+
| copy                 |
+----------------------+
| I love you           |
| All you need is love |
+----------------------+
反过来,把-you放前面:
SELECT COPY FROM fulltext_sample WHERE MATCH(copy)
AGAINST('-you +love' IN BOOLEAN MODE);
结果搜索到的为空表:
Empty set (0.00 sec)
逻辑运算符:
+ 单词必须在被匹配的索引中
- 单词不允许在被匹配的索引中
~ 单词的相关程度逆置。对于某些单词mySQL给出的相关程度很搞,但你不感兴趣,那么在去除
  这个词时该运算符非常有用。与'-'操作符不同,搜索的结果中可以包含相应的词。
< 降低该单词对整个匹配相关程度的贡献。
> 提高该单词对整个匹配相关程度的贡献。
* 该运算符紧跟在所修饰的单词之后,与通配符很相似,匹配以制定单词开头的任意单词。
() 将单词分组为表达式。
现在可以使用更为复杂的查询:
SELECT copy FROM fulltext_sample WHERE MATCH(copy)
AGAINST('+love -good* +(>love <you)' IN BOOLEAN MODE);
此查询请求有关love的所有行,并请求包含love和you的行,但其中没有good开头的单词,然后它将
排列相关程度高于you文档的love文档。

需要注意的是,在MySQL数据库中对一个索引命中一次比对一个索引命中多次具有更高的相关程度。这是
因为罕见的单词比常见的单词更有价值,而对于普通的单词则根本没有价值,只是一些助词,譬如"the"
这样的在文本中很常见的单词。

在一次添加大量数据时,如在网站上索引Web页面,应该先去掉FULLTEXT索引,插入更新的Web页面,然后
再重新创建索引。向带有FULLTEXT索引的表中插入数据将付出昂贵的代价。

事物处理:
默认情况下,MySQL中的SQL处于自动提交模式中,即任何发送给MySQL的SQL将被立即执行。但是有些情况下
需要几条SQL语句一起执行,以保证同步。比方说银行的款项的贷入和贷出,银行需要保证第一个账户贷出同
第二个账户的贷入发生在一个工作单元,如果被单独处理的话,服务器有可能在贷出操作和贷入操作之间崩溃,
那样将造成巨大的经济损失。
通过确保这两个语句发生在一个工作单元,事物可以保证第一条语句在第二条语句失败的情况下“回滚”。要
使用MySQL的事务处理,首先需要创建使用事物表类型(如BDB或InnoDB)的表,这需要在安装MySQL时建立对这些
表的支持(目前MySQL已经不支持BDB类型)。
假设支持BDB数据表单,可以首先设置禁止自动提交模式:
SET AUTOCOMMIT = 0;
然后所有语句必须在BEGIN...COMMIT之间才会生效,如果前面一句执行错误,可以用回滚语句ROLLBACK纠正。

表锁定:
MySQL允许锁定一组表,使得只有一个用户可以使用。与事物处理不同,它不限制表的类型,但你不能回滚已锁定
的表单所进行的操作。
锁定有两个基本功能:
1、对于一组表的多条语句,使它们作为一个工作单元来执行;
2、在某些情况下使多个更新执行得更快
MySQL支持三种锁定:读、本地读和写。两种读锁定是将表锁定以供客户及所有其他客户读取。只要在锁定状态,就不
能对被锁定的表进行写入。读锁定和本地读锁定的区别在于,本地读锁定允许一个客户执行非冲突的INSERT语句,只要
在锁定时没有来自MySQL外部、对MySQL文件的改变即可。如果可能发生来自MySQL外部进程的改变,则需要读锁定。
写锁定将指定的表锁定,不允许任何其他客户对它进行任何访问,包括读和写。锁定使用下面的命令:
LOCK TABLES Account WRITE;
释放锁:
UNLOCK TABLES;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岛上码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值