表和索引
表是用来存储数据和操作数据的逻辑结构,关系数据库中的数据都表现为表的形式。表的结构包括列(column)和行(row)。
索引是有效组织表数据的方式,它由表中一列或多列按照一定得排列顺序组成。也是一种数据对象。
1 掌握创建、删除表的方法
T_sql
Create table
[ database_name.[owner].| [owner.]table_name
(
{ <column_definition>
|column_name as computed_column_expression
|<table_constraint>
} [,…n]
)
[on {file_group|default}] ------定义表存储在指定的文件组中
[textimage_on {filegroup | default}] ----如果表中有ntext、text、image类型的数据,则将这----些数据存储在这里指定的文件组中
<column_definition>::={column_name data_type}
[ [default constant_expression]
| [identity [ (seed,increment)]
]
[<column_constraint>][…n]
删除表
如:
Drop table example-1
Drop table pubs.dbo.example-2
Dbo 是database owner 的缩写,是数据库对象所有者,sql server中的对象的标准写法是:
Databasename.databaseownername.objectname
Dbo 是一个架构(schema)与sql2000不同,在2005中表的调用格式:
“数据库.架构名.表名”
表删除后数据也将删除,不能使用drop table语句删除系统表
2 掌握查看、修改表的定义、属性的方法
查看表
Sp_help table_name
Sp_spaceused table_name
Sp_depends table_name
Sp_rename old_table_name,new_table_name
修改表
Alter table table_name
{
[alter column column_name
{new_data_type [null |not null]}
|add
{ <column_definition>
|column_name as computed_column_expression
|<table_constraint>
} [,…n]
| drop
{constrait constraint_name
| column column_name
}[,….n]
| {check| nocheck} constraint {all |constraint_name[,…n]}
| {enable|disable}trigger {all | trigger_name [,…n]}
}
<column_definition>::={column_name data_type}
[<column_constraint>][…n]
3 理解索引的特点
索引是sql server在列上建立的一种数据库对象。其对表中数据提供逻辑排序,可以提高数据的访问速度。
Sql server提供了两种形式的索引,簇集(clustered)索引和非簇集(nonclustered)索引.
簇集索引根据键的值对行进行排序,所以每个表只能有一个簇集索引。非簇集索引不根据键值排序,索引数据结构与数据行是分开的。由于非簇集索引的表没有按顺序进行排列,所以查找速度明显低于带簇集索引的表。
建立索引会占用磁盘空间。
下列情况适合建立索引
(1) 经常被查询的列,如经常在where子句中出现的列
(2) 在order by 子句中使用的列
(3) 是外键或主键的列
(4) 该列的值唯一的列
下列情况不适合建立索引
(1) 在查询中很少的列
(2) 包含太多重复选用值的列。如:性别列
(3) 数据类型为bit、text、image等的列不能建立索引
用户可以在多个列上建立索引,这种索引叫做复合索引
4 掌握创建和删除索引的方法
DROP INDEX不能用来删除建表时自动创建的索引,而主键会自动创建聚集索引;
主键是一种约束,可以通过ALTER TABLE tablename Drop CONSTRAINT 删除,主键去除了,依附于主键的索引也自动消除。
T_sql:
Create [unique] [ clustered |nonclustered]
Index index_name on table (column [,…n])
Drop index ‘table.index’ [,….n]
Use pubs
Go
Create table emp_pay
(employeeid int not null,
Base_pay money not null,
Commission decimal (2,2) not null
)
Go
Create unique clustered index employeeid_ind
On emp_pay (employeeid)
Go
User pubs
Go
Drop index emp_pay.employeeid_ind
Go