对整个数据库进行搜索的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对整个数据库进行搜索的方法相关的知识,希望对你有一定的参考价值。

我有一个数据库A,想对他的所有表进行搜索,搜索出含“abc”的行。

有什么方法可以做到。

具体到小 ,中 ,大型的数据库,用哪些方法更好。

理论上,要针对所有的表各写一条SQL,SQL中要列出所有的字符类字段,例如:
SELECT * FROM taba WHERE fielda LIKE \'%abc%\' OR fieldB LIKE \'%abc%\' ……;
SELECT * FROM tabb WHERE fielda LIKE \'%abc%\' OR fieldB LIKE \'%abc%\' ……;

写这样的SQL非常痛苦,看你是用的什么数据库,许多数据库系统有系统字典,就是在数据库里面的某些表中存放着所有的数据库、表、字段的名称和类型,那样可以通过那些信息编写出自动生成前面的SQL语句的SQL语句。

另外,一般的数据库都是存放在文件中或者磁盘上,可能利用全盘搜索软件搜索磁盘上特定的字符串,比上述SQL语句要快得多,只是搜索到了,要判断数据库行有一些麻烦。
参考技术A 一个完整的SQL SERVER数据库全文索引的示例。
(以pubs数据库为例) 首先,介绍利用系统存储过程创建全文索引的具体步骤:
1) 启动数据库的全文处理功能 (sp_fulltext_database)
2) 建立全文目录 (sp_fulltext_catalog)
3) 在全文目录中注册需要全文索引的表 (sp_fulltext_table)
4) 指出表中需要全文索引的列名 (sp_fulltext_column)
5) 为表创建全文索引 (sp_fulltext_table)
6) 填充全文目录 (sp_fulltext_catalog)
---------********示例********-------------
以对pubs数据库的title和notes列建立全文索引,之后使用索引查询title列或notes列中包含有datebase 或computer字符串的图书名称:
在这之前,需要安装Microsoft Search服务,启动SQL server全文搜索服务 user pubs
--打开数据库 go --检查数据库pubs是否支持全文索引,如果不支持 --则使用sp_fulltext_database 打开该功能
if(select databaseproperty('pubs','isfulltextenabled'))=0
execute sp_fulltext_database 'enable'
--建立全文目录FT_PUBS execute sp_fulltext_catalog 'FT_pubs','create'
--为title表建立全文索引数据元 execute sp_fulltext_table 'title','create','FT_pubs','UPKCL_titleidind'
--设置全文索引列名 execute sp_fulltext_column 'title','title','add' execute sp_fulltext_column 'title','notes','add'
--建立全文索引 --activate,
是激活表的全文检索能力,也就是在全文目录中注册该表 execute sp_fulltext_table 'title','activate'
--填充全文索引目录 execute sp_fulltext_catalog 'FT_pubs','start_full' go
--检查全文目录填充情况
While fulltextcatalogproperty('FT_pubs','populateStatus') <> 0 begin
--如果全文目录正处于填充状态,则等待30秒后再检测一次 waitfor delay '0:0:30' end
--全文目录填充完成后,即可使用全文目录检索 select title form where CONTAINS(title,'database') or CONTAINS(title,'computer') or CONTAINS(notes,'database') or CONTAINS(notes,'database') '--------------
以下介绍一下全文操作类的系统存储过程 过程名称:sp_fulltext_service 执行权限:serveradmin或系统管理员 作 用:
设置全文搜索属性 过程名称:sp_fulltext_catalog
执行权限:db_owner及更高角色成员
作 用:创建和删除一个全文目录,启动或停止一个全文目录的索引操作 过程名称:sp_fulltext_database 执行权限:
db_owner角色成员 作 用:初始化全文索引或删除数据库中所有全文目录 过程名称:sp_fulltext_table 执行权限:
db_ddladnmin或db_owner角色成员 作 用:将一个表标识为全文索引表或非全文索引表 过程名称:sp_fulltext_column 执行权限:
db_ddladnmin角色成员 作 用:指出一个全文索引表中的那些列假如或退出全文索引

搜索整个DB2 DB

我有一个特定的值,比方说'资源1'。我需要在数据库中找到所有这些实例,因为我需要对格式进行更新以将其更改为资源2。

我怎样才能做到这一点?该数据库位于IBM DB2 10.5中。

答案

好吧,这可以通过存储过程或app以类似暴力的方式完成:

  1. 查询所有列的SYSCAT.COLUMNS,可能仅限于字符串类型
  2. 在其中,使用LIKE或“资源1”查询相等的每列。这可以在搜索更新时完成。

性能?为什么?看起来不是一个好主意。

以上是关于对整个数据库进行搜索的方法的主要内容,如果未能解决你的问题,请参考以下文章

实现搜索的不同方式

我应该如何拆分我的数据以进行交叉验证和网格搜索?

在几个表中搜索列名,而不是整个数据库 SQL

搜索整个DB2 DB

K-Nearest Neighbors Algorithm

weka中如何对整个数据集进行分类