现在的位置: 首页 > 综合 > 正文

sql数据库教程与数据表操作语句

2013年12月20日 ⁄ 综合 ⁄ 共 5204字 ⁄ 字号 评论关闭

这里包括了数据库创建,删除,修改,备份,以及数据表新建表,删除表,添加表索引,创建视图等;
1、说明:创建数据库
create database database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
use master
exec sp_addumpdevice 'disk', 'testback', 'c:www.111cn.netmynwind_1.dat'
--- 开始 备份
backup database pubs to testback
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
a:create table tab_new like tab_old (使用旧表创建新表)
b:create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表
drop table tabname
6、说明:增加一个列
alter table tabname add column col type
注:列增加后将不能删除。db2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: alter table tabname add primary key(col)
说明:删除主键: alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname

 

在一个产品介绍网站中查询产品时,由于产品的介绍性文字可能会很长,如果使用对产品介绍字段使用like进行模糊查询,性能肯定会是问题。

那么如何解决这个问题呢?第一个想法就是使用全文索引。

那么全文索引是什么、应该如何应用、在应用的过程中又应该注意哪些事情呢?

 

1、是什么全文索引 

    [摘录自SQL Server2000联机从书]

    全文索引为在字符串数据中进行复杂的词搜索提供有效支持。全文索引存储关于重要词和这些词在特定列中的位置的信息。

    全文查询利用这些信息,可快速搜索包含具体某个词或一组词的行。

    全文索引包含在全文目录中。每个数据库可以包含一个或多个全文目录。一个目录不能属于多个数据库,而每个目录可以包含一个或多个表的全文索引。

    一个表只能有一个全文索引,因此每个有全文索引的表只属于一个全文目录。

    全文目录和索引不存储在它们所属的数据库中。目录和索引由 Microsoft 搜索服务分开管理。

    全文索引必须在基表上定义,而不能在视图、系统表或临时表上定义。

 

    依据上面的描述,可以做这样一个比喻。大家大概都见过档案柜,档案柜是将各种档案按照分类登记在档案索引卡上,这个档案柜中的就象建立的全文索引,

通过这些档案索引卡可以迅速定位你要查找的卷宗所在的位置。如果不建立这些索引卡,如果卷宗数量不多还好,一旦档案数量很多的时候显然很难找到期望的卷宗,

这就类似使用LIKE的情形。

 

全文索引和普通索引的区别: 

 ***普通SQL索引***

存储时受定义它们所在的数据库的控制

每个表允许有若干个普通索引

当对作为其基础的数据进行插入、

更新或删除时,它们会自动更新

将数据添加到全文索引称为填充,

全文索引可通过调度或特定请求来请求,

也可以在添加新数据时自动发生不分组

使用SQL Server企业管理器、

向导或Transact-SQL语句创建和除去

 

 ***全文索引***

存储在文件系统中,但通过数据库管理

每个表只允许有一个全文索引

在同一个数据库内分组为一个或多个全文目录

语法

CREATE FULLTEXT INDEX ON table_name

      [ ( { column_name
             [ TYPE COLUMN type_column_name ]
             [ LANGUAGE language_term ]
        } [ ,...n ]
            ) ]
    KEY INDEX index_name
        [ ON <catalog_filegroup_option> ]
        [ WITH [ ( ] <with_option> [ ,...n ] [ ) ] ]
[;]

<catalog_filegroup_option>::=
  {
        fulltext_catalog_name
  | ( fulltext_catalog_name , FILEGROUP filegroup_name )
  | ( FILEGROUP filegroup_name , fulltext_catalog_name )
  | ( FILEGROUP filegroup_name )
  }

<with_option>::=
  {
   CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [, NO POPULATION ] }
  | STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
  }

参数

table_name

包含全文索引中的一列或多列的表或索引视图的名称。

column_name

全文索引中包含的列的名称。只能对类型为 char
varchar
nchar
nvarchar
text
ntext
image
xml
varbinary
的列进行全文索引。若要指定多个列,请按如下方式重复 column_name
子句:

CREATE FULLTEXT INDEX ON table_name
(column_name1
[…], column_name2
[…]) …

TYPE COLUMN type_column_name

table_name
中列的名称,用于存储 column_name
的文档类型。

type_column_name
的类型必须为 char
nchar
varchar
nvarchar
。仅当 column_name
中的一个或多个列属于类型 varbinary(max)
image
时,才指定 type_column_name
;否则 SQL Server 将返回一个错误。

有关详细信息,请参阅全文搜索筛选器。

LANGUAGE language_term

存储在 column_name
中的数据的语言。

language_term
为可选参数,可以将其指定为与语言区域设置标识符 (LCID) 对应的字符串、整数或十六进制值。如果指定了 language_term
,则它表示的语言将用于对存储在 char
nchar
varchar
nvarchar
text
ntext
列中的数据进行索引。

如果未针对列将 language_term
指定为全文谓词的一部分,则该语言就是查询时所使用的默认语言。如果未指定任何值,则使用 SQL Server 实例的默认语言。

如果指定为字符串,则 language_term
对应于 syslanguages 系统表中 alias 列的值。字符串必须用单引号引起,如 '
language_term
'
。如果指定为整数,则 language_term
就是标识该语言的实际 LCID。如果指定为十六进制值,则 language_term
将以 0x 开头,后跟 LCID 的十六进制值。十六进制值不得超过八位(包括前导零)。

如果该值是双字节字符集 (DBCS) 格式,则 SQL Server 会将其转换为 Unicode 格式。

对于指定为 language_term
的语言,必须启用断字符和词干分析器等资源。如果此类资源不支持指定的语言,则 SQL Server 将返回错误。

使用 sp_configure 存储过程可访问有关 Microsoft SQL Server
实例的默认全文语言的信息。有关详细信息,请参阅 sp_configure (Transact-SQL) 和default full-text
language 选项。

如果非 BLOB 和非 XML 列包含多种语言的文本数据,或者列中存储的文本的语言未知,则可能适合使用非特定 (0x0)
语言资源。但是,您应该先了解使用非特定 (0x0) 语言资源的可能后果。有关使用非特定 (0x0)
语言资源的可能解决方案和后果的信息,请参阅在创建全文索引时选择语言。

对于存储在 XML 或 BLOB 类型的列中的文档,进行索引时将使用文档内的语言编码。例如,在 XML 列中,XML 文档中的 xml:lang
属性将标识语言。在查询时,除非将 language_term
指定为全文查询的一部分,否则将使用以前在 language_term
中指定的值作为全文查询的默认语言。

KEY INDEX index_name

table_name
的唯一键索引的名称。KEY INDEX 必须是唯一的单键不可为 Null 的列。为全文唯一键选择最小的唯一键索引。为获得最佳性能,建议全文键使用整数数据类型。

fulltext_catalog_name

用于全文索引的全文目录。数据库中必须已存在该目录。此子句为可选项。如果未指定,则使用默认目录。如果默认目录不存在,SQL Server 将返回错误。

FILEGROUP filegroup_name

针对指定的文件组创建指定的全文索引。该文件组必须已存在。如果未指定 FILEGROUP 子句,则全文索引位于与基表或视图相同的文件组中(对于非分区表),或者位于主文件组中(对于分区表)。

CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }

指定 SQL Server 是否维护对索引数据的所有更改的列表。更改跟踪不会记录通过 WRITETEXT 和 UPDATETEXT 进行的数据更改。

MANUAL

指定是使用 SQL Server 代理按计划传播更改跟踪日志,还是由用户手动进行传播。

AUTO

指定在关联的表中修改了数据时,SQL Server 自动更新全文索引。默认值为 AUTO。

注意:
虽然更改可以自动传播,但全文索引中可能不会立即反映这些更改。有关用于监视全文索引进程以及用于诊断全文索引相关问题的属性的详细信息,请参阅使用 Transact-SQL 函数获取全文属性值。
OFF [ DE>,
DE> NO POPULATION]

指定 SQL Server 不保留对索引数据的更改的列表。

仅当 CHANGE_TRACKING 为 OFF 时,才能使用 NO POPULATION 选项。如果指定了 NO
POPULATION,则 SQL Server 在创建索引后不会对其进行填充。只有在用户使用 START FULL 或 INCREMENTAL
POPULATION 子句执行 ALTER FULLTEXT INDEX 命令后,才会填充索引。如果未指定 NO POPULATION,则
SQL Server 创建索引后将对其进行完全填充。

STOPLIST [ = ] { OFF | SYSTEM | stoplist_name
}

将全文非索引字表与索引关联起来。不使用属于指定非索引字表的任何标记填充索引。如果未指定 STOPLIST,则 SQL Server 会将系统全文非索引字表与索引关联起来。

OFF

指定没有与全文索引关联的非索引字表。

SYSTEM

指定应对此全文索引使用默认的全文系统 STOPLIST。

stoplist_name

指定要与全文索引关联的非索引字表的名称。

备注

建议索引键列为整数数据类型。这可在执行查询时提供优化。

权限

用户必须对全文目录拥有 REFERENCES 权限,对表或索引视图拥有 ALTER 权限,或者必须是 sysadmin 固定服务器角色、db_owner 或 db_ddladmin 固定数据库角色的成员。

如果指定了 SET STOPLIST,则用户必须对指定的非索引字表拥有 REFERENCES 权限。此 STOPLIST 的所有者可授予此权限。

注意:
授予 public 对 SQL Server 随附的默认非索引字表的 REFERENCE 权限。

示例

以下示例创建一个针对 DE>HumanResources.JobCandidateDE> 表的全文索引。

 


USE AdventureWorks;
GO
CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);
CREATE FULLTEXT CATALOG ft AS DEFAULT;
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume)
KEY INDEX ui_ukJobCand
WITH STOPLIST = SYSTEM;
GO

抱歉!评论已关闭.