你好!很高兴你看到这篇博客,我写这篇博客的目的有两个:
1.总结有关T-SQl的实战效果
2.总结SQL Server数据库使用过程中给的技巧
希望朋友你有什么好的意见可以留言,谢谢
Sql Server数据库是我们公司最常用的数据库之一,那么关于数据库的基本内容讲解,我在这里就不重复了,想要了解的可以简单看一下sql server百科.
关于学习sql server的优质学习资源我这里收集了一下,下载链接
可到官网下载最新版本的sql server,安装教程可以到知乎或者百度查找。
若安装不成功或者有好的安装教程可以留言。
ps:学习资料中的SQL SERVER学习手册,有介绍安装的详细步骤。
1.域完整性
对表中字段属性的约束,通常指数据的有效性,它包括字段的值域、字段的类型及字段的有效值值等,域完整性可以确保不会输入无效的值。
2.实体完整性
实体完整性就是:主键的约束。
即:关系中的主属性值不能为null且不能有相同的值。
3.参照完整性
外键约束,关系中的外键必须是另一个关系的主键有效值,或者为null.参照完整性维护表间数据的有效性,完整性,通常通过建立外部键联系另一表的主键实现,还可以用触发器来维护参照完整性。
T-SQL语言和sql语言是差不多的,唯一的不同是改变了一些语法书写或者规范,只要你学过sql,那么学习t-sql就是一样的了,相差无几。
ps: t-sql语言不区分大小写
以上截图来自《sql server完全学习手册》,[ ]内的数据可以不写。
在该语法中,on用来创建数据文件,加上primary代表是主数据文件。
filegroup关键字用来创建次文件组,其中还可以创建次数据文件。
log on 观健字用来创建事务日志文件。name为所创建文件的文件名称。
filename 指出了文件的存储路径。size定义初始化大小,maxsize定义文件的最大容量,filegrowth指定了文件增长值。
在创建数据库时,可以为数据库指定多个数据文件(一主多辅)
例如:创建【学生成绩管理系统】数据库,并指定多个数据库文件。
SQL Server中一个数据库可以对应多个物理文件,其中有一个的主数据库文件,扩展名为MDF,其他为次数据库文件,扩展名为NDF。可以将不同的文件存放在不同的驱动器上,可以提高数据访问速度。
文件组时分配和管理数据文件的集合,是根据数据文件而创建的。通过创建文件组,可以将不同的数据文件存储在不同的文件组中,这样不仅可以优化数据存储还可以提高数据的I/O读写性能。、
使用过程中需要注意以下几点:
创建【学生成绩管理系统】数据库,并为该数据库指定两个文件组
在上述语句中,创建了两个文件组,即:DBGROUP1 与 DBGROUP2。其中,DBGROUP1文件组中学生成绩管理系统_GROUP1和学生成绩管理系统_GROUP2两个数据文件。DBGROUP2文件组中学生成绩管理系统_GROUP3和学生成绩管理系统_GROUP4两个数据文件。
说明
目前用到文件组的情形是,在创建数据库表的时候用关键字ON进行分组。
1. 采用alter关键字
alter database database_name modify name = newdatabase_name
例如:把“学生成绩管理系统” 改为 “Student_result”
alter database “学生管理成绩系统” modify name = “Student_result”
说明:alter修改的是数据库的逻辑名称,对物理名称无影响。
2. 使用系统存储过程 sp
EXEP sp_renamedb ‘学生成绩管理系统’ ‘Student_result’
扩大和收缩数据库文件目前还没有找到相关语句,解决方案是在数据库管理系统中操作即可。
使用add file 语句
修改“学生成绩管理系统”,增加一个新的次要文件,大小为5M
alter database 学生成绩管理系统
add file
(
name = “学生成绩管理系统_data1”,
filename=‘d:\sql server\database\学生成绩管理系统_data1.mdf’,
size=5M,
maxsize=15M,
filegrowth=15%
)
drop database database_name […n]
例如,删除【学生成绩管理系统】数据库,
drop database 学生成绩管理系统
采用DATABASEPROPERTYEX(database_name,property)函数
此函数一次只能返回一个选项的信息。
例如:查看【学生成绩管理系统】数据库的状态
use 学生成绩管理系统
go
select DATABASEPROPERTYEX(‘学生成绩管理系统’,‘status’)
as ‘当前数据库状态’
DATABASEPROPERTYEX ( database , property )
参数说明:
参数 | 说明 |
---|---|
database | 当前链接的数据库名称 |
property | 说明 |
Collation | 排序规则 |
ComparisonStyle | 排列样式 |
Edition | 数据库版本信息(标准版还是企业版) |
IsAnsiNullDefault | 数据库遵循IOS规则,允许值为null |
IsAnsiNullsEnabled | 所有与null的比较取值为未知 |
IsAnsiPaddingEnabled | 在比较或插入前,字符串将被填充到相同长度 |
IsAnsiWarningsEnabled | 发生标准错误条件时,SQL Server 会发出错误消息或警告消息 |
IsArithmeticAbortEnable | 如果执行查询时发生溢出或被零除错误,则将结束查询 |
IsAutoClose | 在最后一个用户退出后,数据库完全关闭并释放资源 |
IsAutoCreateStatistics | 查询优化器根据需要创建单列统计信息以提高查询性能 |
IsAutoCreateStatisticsIncremental | 条件允许时,自动创建的单列统计信息递增 |
IsAutoShrink | 可以定期自动收缩数据库文件 |
IsAutoUpdateStatistics | 自动更新统计信息 |
IsClone | 数据库是使用 DBCC CLONEDATABASE 创建的用户数据库的仅限架构和仅限统计数据 |
IsCloseCursorsOnCommitEnabled | 提交事务后,会关闭所有打开的游标 |
IsFulltextEnabled | 支持对数据库进行全文和语义索引 |
IsInStandBy | 数据库以只读方式联机,并允许还原日志。 |
IsLocalCursorsDefault | 游标声明默认为 LOCAL |
IsMemoryOptimizedElevateToSnapshotEnabled | 在会话设置 TRANSACTION ISOLATION LEVEL 设置为 READ COMMITTED、READ UNCOMMITTED 或较低的隔离级别时,使用 SNAPSHOT 隔离访问内存优化表。 |
IsMergePublished | 如果安装了复制,则 SQL Server 支持发布数据库表供合并复制使用 |
IsNullConcat | Null 串联操作数产生 NULL |
IsNumericRoundAbortEnabled | 表达式中缺少精度时将产生错误 |
IsParameterizationForced | PARAMETERIZATION 数据库 SET 选项为 FORCED |
IsQuotedIdentifiersEnabled | 允许对标识符使用英文双引号 |
IsPublished | 如果安装了复制, SQL Server 支持发布数据库表供快照复制或事务复制使用 |
IsRecursiveTriggersEnabled | 已启用触发器递归触发 |
IsSubscribed | 数据库已订阅发布 |
IsSyncWithBackup | 数据库为发布数据库或分发数据库,并且支持在不中断事务复制的情况下还原 |
IsTornPageDetectionEnabled | SQL Server 数据库引擎检测到因电力故障或其他系统故障造成的不完全 I/O 操作 |
IsVerifiedClone | 数据库是使用 DBCC CLONEDATABASE 的 WITH VERIFY_CLONEDB 选项创建的用户数据库的仅限架构和仅限统计信息副本 |
IsXTPSupported | 指示数据库是否支持内存中 OLTP,即创建和使用内存优化表和本机编译模块。 |
LastGoodCheckDbTime | 上次在指定数据库上成功运行 DBCC CHECKDB 的日期和时间 |
LCID | 排序规则的 Windows 区域设置标识符 (LCID) |
MaxSizeInBytes | 最大数据库大小(以字节为单位) |
Recovery | 数据库恢复模式 |
ServiceObjective | SQL Database或 SQL 数据仓库 中的数据库的性能级别 |
ServiceObjectiveId | SQL Database 中的服务器目标 ID |
SQLSortOrder | SQL Server 早期版本中支持的 SQL Server 排序顺序 ID |
Status | 数据库状态 |
Updateability | 指示是否可以修改数据 |
UserAccess | 指示哪些用户可以访问数据库 |
Version | 用于创建数据库的 SQL Server 代码的内部版本号。 标识为仅供参考。 不提供支持。 不保证以后的兼容性 |
分离数据库是指将数据库从SQL SERVER 2008实例中删除,但是保存其数据库文件和日志文件。
例如:使用sp_detach_db存储过程分离“学生成绩管理系统”数据库
EXEC sp_detach_db 学生成绩管理系统
附加数据库是指重新将分离的数据库定位到相同/不同的是服务器中。
附加数据库时,所有的数据库文件(包括.mdf 和 .ndf文件)都必须可用。
如果任何数据库的文件路径有变,则必须指定文件的当前路径。
使用 FOR ATTACH 语句将分离的“学生成绩管理系统”附加到指定的数据库实例中:
create database 学生成绩管系统
on
(
filename='d:\sql server\DATABASE\学生成绩管理系统_DAT.mdf ’
)
log on
(
filename=‘d:\sql server\DATABASE\学生成绩管理系统_log.ldf’
)
for attach
语句未找到,可参考手册中的数据库管理工具进行操作。
在sql server 2008中主要从以下三个方面进行优化数据库:
1、数据文件和日志文件的存储位置
在数据库系统中,如果将数据文件和日志文件存放在同一个磁盘中,那么在对这两种数据进行读写操作中,会降低磁盘的运行效率。
方案:将数据文件和日志文件存放在不同的磁盘中,对于多个数据文件应当将它们分散于不同的磁盘进行存储。
2、文件组的使用
文件组时多个数据文件的集合,方便数据文件的管理和访问。
文件组可以提高系统的性能,主要有两个方面:平衡负荷和并行访问。
另外,通过备份单个文件和文件组可以防止数据库发生意外。当数据库出现错误时,通过回复备份的文件和文件组就可以还原数据库,从而简化了数据库的维护工作。
将数据库表和索引放在不同的文件组中,对于经常使用的表来说可以提高查询效率。
注意:文件组可以提高数据库的效率但是不能提高其稳定性
3、RAID技术
RAID 独立磁盘构成的具有冗余能力的阵列
(redundant 英[rɪˈdʌndənt] 多余的
arrays 排列 of
Independent 英[ˌɪndɪˈpendənt] 独立的
Disks 英[dɪsks] 磁盘
)
技术详细介绍.
RAID是由多个磁盘驱动器组成的磁盘系统,它将多个磁盘驱动器组成一个磁盘阵列,以便提供高性能、高可靠性、大存储容量、低成本的磁盘系统。
SQL SERVER中主要涉及的是RAID0、RAID1、RAID5
- RAID0是数据条带化
raid0不断地分割数据,将数据存储在不同地磁盘中,因此具有很高地磁盘读写率。
打个比方:4个磁盘组成的磁盘系统,把数据分割存储在四个磁盘中,在多核计算机中,I/O效率是单个磁盘的4倍。
不足:没有冗余容错机制,一旦一个磁盘损坏,整个磁盘系统都不可以使用。
- RAID1是磁盘镜像化
RAID1最大限度的保证了用户数据的安全性和可修复性。RAID1的操作方式是把用户存储的数据完全复制到另一个磁盘中,就像镜子一样。RAID1的磁盘使用率是50%(如果是两个磁盘)。在sql server中,RAID1策略可用于日志。
- RAID5是带奇偶校验的条带化
什么是奇偶检验
简单的说奇偶校验就是根据检验读取数据时1的个数有没有发生奇偶变化,虽然说一次变化两个的机率比较小,但是奇偶校验检验不出双位错误。
RAID5是最常用的容错等级,没有固定的校验盘,而是按照规则将奇偶校验信息均匀地分布在阵列所属地硬盘上,所以在每块硬盘上,既有数据信息也有校验信息。这样解决了争夺校验盘地问题,而且同一组数据增加了并发操作。既解决了性能问题,也解决了安全问题,既适用于大量数据地操作也适用于各类事务的操作。
SQL Server属于关系型数据库,所谓的关系,指的就是表。
表由行和列组成,每一列都是一个属性,每一行都代表了一条完整的数据。
详情点击
use + 数据库的名称
例子:切换成DB2数据库
use DB2
一般我们在创建表之前已经切换到相应的数据库了
简单的书写:
create table table_name
(
属性列名 数据类型(所占字节) [not null / null] [约束条件]
…
)
完整的写法
s
说明
database_name 用于指定在哪个数据库中建立表
owner 用于指定该数据表的所有者
table_name: 数据表名
column_definition 用于定义数据表中的字段名称
table_constraint 该字段的约束条件
column_name 列名
computed_column_expression 定义计算字段值的表达式
on {filegroup|default} 指定数据表所存储的文件组
textimage_on {filegroup | default} 指定text文本和image文件存储的文件组
data_type 数据类型
constant_expression 指定字段默认值的常量、null或者系统函数
indentity 用于指定该字段为标识字段
seed 标识字段的起始值
increment 用于定义字段的标识增量
alter table 表名
add constraint 约束名 约束类型 (列名)
说明:约束名是自定义的。
主键约束,为学生表中的学号列增加主键约束 primary key
alter table 学生表
add constraint pk_学号 primary key (学号)
强调:主键约束列不可为空
唯一约束 unique , 给姓名添加一个唯一约束 unique
alter table 学生表
add constraint un_姓名 unique(姓名)
检查约束 check,给年龄添加检查约束,年龄大于18 check
alter table 学生表
add constraint ck_年龄 check (年龄 > 18)
默认约束 default,给性别添加默认约束,男
alter tale 学生表
add constraint de_性别 default ‘男’ for 性别。
外键约束:加强两个表之间的联系
foreign key : 找到有相同的列
外键的取值规则:空值或参照的主键值
注意
1、插入非空值时,如果主键中没有这个值则不能插入
2、更新时,不能改为主键表中没有的值
3、删除主键表记录时,可以在外键时选定外键记录一起删除还是拒绝删除
4、更新主键记录时,可以同时更新外键的值或者拒绝更改
示例:
有两张表,成绩表和学生表,都有学号的属性,给成绩表中的学号建立一个外键约束,来自于学生表
alter table 成绩表
add constraint fk_学号 foregin key(学号)
references 学生表 (学号)
要求
1、两个表中的字段、类型、长度保持一致
2、引用的列,references + 的列,必须是主键约束或者唯一约束
3、两个表中的列,尽量名字保持一致(规范)
eg: test库中,创建dz(编号,姓名,单位,性别,电话);
编号为主键,所有属性都是字符型,长度自己设定;
限制性别的取值为男,女,单位默认值为‘跳动字符’
create table dz
(
编号 char(20) primary key,
姓名 char(20),
单位 char(50) default ‘跳动字符’,
性别 char(5) check (性别=‘男’ or 性别=‘女’),
电话 char(20) unique
)
声明
若存在联合主键,则在最后声明
primary key(列1,列2)
alter table 表名
drop constraint 约束名
根据添加约束中的语句操作:
对sql server数据库操作的,增强的sql语言
详情.
数据库对象的名称即为其标识符
t-sql语言一次可提交多条,语句顺序依次执行。
语法: declare @ 字符名称 字符类型
eg:声明两个变量 name 字符类型 age int
declare @name varchar(10),age int
赋值 set 变量 = 值
eg: set @name = ‘张三’
同时多个赋值
select @name = ‘李四’,@age = 19.
输出
print @name
print @age
系统内部定义好的,用户只能调用,不可修改
@@+字符名
数据操作语言(Data Manipulation Language)
Manipulation 英[məˌnɪpjʊˈleɪʃən]
包括对数据库的增删改查
如果用户希望在查询返回结果中删除重复行
select distinct 列名 from 表名称
用于规定返回的记录的数目
select top n *|column from table
top n 用于指定查询结果返回的行数
使用select语句查询数据时,可使用别名的方法根据需要对数据显示的标题进行修改
1、在列的表达式中给出别名
select 列名 ‘别名’ from 表名
eg: select 学号 ‘no’ , 姓名 ‘name’, 性别 ‘sex’, 年级 ‘grade’ from 学生信息
2、使用‘=’表达式
select ‘别名’ = 列名 from 表名
eg: select ‘no’ = 学号,‘name’ = 姓名,‘sex’ = 性别 from 学生信息
3、使用AS关键字来连接列表达式和指定的别名
select 列名 as ‘别名’ from 表名
eg: select 学号 as ‘no’, 姓名 as ‘name’, 性别 as ‘sex’ from 表名
在进行数据查询时,经常需要对查询列的数据进行再次计算
eg:
select 编号,学号,‘调整前成绩’ = 成绩,‘调整后成绩’ = 成绩-10 from 成绩表
关键字where , sql server 支持比较、范围、列表、字符串匹配等选择方法
1、比较搜索条件
符号 | 说明 | 符号 | 说明 |
---|---|---|---|
= | 等于 | <> | 不等于 |
> | 大于 | !> | 不大于 |
< | 小于 | !< | 不小于 |
>= | 大于等于 | != | 不等于 |
<= | 小于等于 |
2、逻辑运算符
and 两边条件同时满足
or 两边条件满足其一
3、范围搜索条件
范围搜索返回介于两个指定值之间的所有值,可分为包括范围和排他范围两种类型
用between , not between
4、列表搜索条件
IN 关键字,使用户可以选择与列表中的任意值匹配的行
例子:
select 学号,班级编号,姓名,性别,籍贯
from 学生信息
where 籍贯 in (‘beijing’,‘shenzhen’)
5、搜索条件中的字符匹配符
like 关键字搜索与指定模式匹配的字符串
字符 | 说明 |
---|---|
% | 替代零个或多个字符 |
_ | 替代一个字符 |
[ ] | 指定范围内单个字符,[ ] 中可以是单个字符[abcd],或者多个字符[a-f] |
[^] | abcd不在范围内的单个字符,单个 [ ^abcd],不在字符范围[ ^a-f ] |
6、涉及空值的查询
7、聚合函数
对一组值执行计算,并返回单个值
函数名 | 作用 |
---|---|
SUM([distinct] <列名>) | 计算列值总和 |
AVG([distinct] <列名>) | 计算列值平均值 |
max([distinct] <列名>) | 求列中最大值 |
min([distinct] <列名>) | 求列中最小值 |
count(*) | 统计表中行的个数 |
count([distinct] <列名>) | 统计本列列值个数 |
上述函数中除了count(*)外,其他函数在计算的过程中均忽略null值。
语法:select 聚合函数 from 表名
8、数据分组
group by 语句用于结合聚合函数,根据一个或多个列对结果集进行分组
使用技巧:
group by 后面的字段,要写在select 的后面第一位
eg:
查询每个年级的总人数和班级总数
select 年级,sum(人数) as ‘总人数’,count(班级编号) as ‘班级个数’
from 班级信息
group by 年级
eg:
查询每门课的最高分和最低分(表为成绩表)
select 课程编号 ,max(成绩) as ‘最高分’,
min (成绩) as ‘最低分’
from 成绩表
group by 课程编号
having通常与group by子句一起使用。相当于一个用于组的where子句,制定组的搜索条件。having子句包含聚合函数,但where不可以使用。
select 学号,sum(成绩)
group by 学号
having sum(成绩) <60
9、order by 排序
10、where
运算符 | 符号 | 说明 |
---|---|---|
比较符 | =、>、<、>=等 | 比较两个表达式 |
逻辑 | and、or、not | 组合两个表达式的运算结果或取反 |
范围 | between、not between | 搜索值是否在范围内 |
列表 | in、not in | 查询值是否属于列表之一 |
字符匹配符 | like、not like | 字符串是否匹配 |
语法
select select_list
[into new_table_name]
from table_list
[where search_conditions]
[group by group_by_list]
[having search_conditions]
[order by order_list [ASC | DESC]]
说明:
select 选择列表 into 新表名 from 表名
在查询的基础上创建新表
在实际查询应用中,用户所需要的数据并不全在一个表中,可能存在多个表中,这时就需要使用多表查询。
在数据库应用中,经常需要从多个相关的表中查询数据,这就是需要进行表连接
说明: 多表查询首先要在各个表之间建立连接。
技巧
用户在进行基本连接操作时,可以遵循以下基本原则:
select 子句列表中,每个目标列前都要加上基本表名称
from 子句应包括所有使用的基表
where 子句应定义一个连接
**多表查询步骤:**首先确定表,有几个表,再根据模板书写
1、多表查询
案例:查询学生的学号,姓名,性别,以及所在的班级名称和年级
ps:同一张表中的属性,从第二个列开始可以省写表名
涉及两个表:学生信息表和班级信息表
select 学生信息.姓名,学号,性别,班级信息.班级名称,年级
from 学生信息 inner join 班级信息
where 学生信息.班级编号 = 班级信息.班级编号
2、完全连接
说明:使用FULL OUTER JOIN 关键字对两个表进行连接。
这种连接方式返回二者中的所有行。当某行在一个表中设有匹配的值时,
则该表中有值,若没有值则显示为NULL.
案例:
查询出每个班的所有情况
select 班级信息.班级名称,年级,人数,课程信息.班主任,课程名称,开课系列
from 班级信息 full outer join 课程信息 on 班级信息.班级编号 = 课程信息.班级编号
场景 : 给出了查询条件,但却没有具体内容,需要先查出来
使用 : 子查询中可以包含聚合函数
说明
子查询就是where子句的条件
子查询可以嵌套在select、insert、update、delete语句中
子查询的select查询总是使用圆括号括起来
子查询分为两种:
①嵌套子查询
一个查询中嵌套任意多个子查询,一个查询中可以包含另一个子查询
②相关子查询
嵌套查询案例:
查询计算机系学生选修了哪些课程 (系在Student表,课程在sc表)
select *
from sc
where sno in
(select sno from student where sdept=‘计算机系’)
ps : where后要什么,子查询就查什么
例子:查询修了‘c02’课程且成绩高于此课程的平均成绩的学生的学号和成绩
select sc.sno,grade
from sc
where cno = ‘c02’ and grade > (select AVG(grade) from sc where cno = ‘c02’)
相关子查询(单值子查询)
这样的子查询只返回一个值,然后将一列值与查询返回的值进行比价
案例
查询和‘ff’在同一个班的学生信息
select 学生信息.xx,xxx,xxxx,
from 学生信心 as s, 班级信息 as c
where s.班级编号 = c.班级编号
and s.班级编号 in
(select 班级编号 from 学生信息 where 姓名=‘ff’)
① 写出select语句框架
select
from
where
②确定有几张表,全部写入from后,用as写别名
③确定子查询
④子查询中遵循①②③
⑤确定要查的所有信息
使用select …INTO 语句可以在查询的基础上创建新表语法为:
select 选择列表
into 新表名
from 表名
语法
update 表名 set 列名 = 表达式
set子句指定要更改的列和这些列的新值
带where子句的update语句
假设将成绩为“95”,并且在‘1002’到‘1003’之间课程编号的所有学生
调动到学号是3的里面
update 成绩表
set 学号=‘3’
where 课程编号 between ‘1002’ and ‘1003’
and 成绩 = 95.
条件不统一,更改的值也不统一,考虑多个update
eg:更新’课程编号’为1001的行时同时更新’'课程编号’为1002的行,
这时需要用到多个update语句,为每个单独的条件编号写update语句
update 成绩表
set 成绩 = 89
where 课程编号=1001
update 成绩表
set 成绩 = 88
where 课程编号=1002
视图是基于查询结果的虚表
在SQL SERVER 2008中,可以创建标准视图、索引视图和分区视图
标准视图组合了一个或多个表中的数据,您可以获得使用视图的大多数好处,
包括将重点放在特定数据上及简化数据操作
索引视图是被具体化了的视图,即它已经过计算并存储。索引视图尤其适于聚合多行的查询。但它们不太适于经常更新的基本数据集。
分区视图在一台或多台服务器间水平连接一组成员表中的分区数据
视图的优点:
可以使用create view 语句来创建视图,对应语法如下:
create view view_name
as select 语句
例子:创建stu数据库中的表‘班级信息’中所有记录的视图,view_班级信息
create view view_班级信息
as
select * from 班级信息
查看视图的内容和查看表是一样的
重命名视图也是一样的
eg:
①使用sp_rename 修改视图的名称
例子:
exec sp_rename ‘view_班级信息’,‘view_班级信息2’
②使用sp_rename修改视图中列的名称
例子:
exec sp_rename ‘view_班级信息人数’,‘总人数’
对于表的操作在视图中同样适用
!一旦视图中的数据做了更改,原表中的数据也会更改
即:视图对数据的修改,也会影响原表
了解
当在同一表中建立聚集索引和非聚集索引时,应先建立聚集索引。
若先建立非聚集索引,在建立聚集索引时,系统会自动将非聚集索引删除,然后再重新建立非聚集索引。
当现有的聚集索引被删除时,系统将自动重建现有的非聚集索引。
使用crate index 语句来创建索引,语法如下:
create [unique]
[clustered | nondustered] index index_name
on 表名 (column [,…n])
其中各参数的含义如下:
① unique
为表或视图创建唯一索引
②clustered
表示创建聚集索引,键值的逻辑顺序决定表中对应行的物理顺序。
③ nonclustered 创建非聚集索引
④ index_name 索引的名称
⑤ column 索引所基于的一列或多列
例子
1、 为student表中的sno列创建非聚集索引
create index ix_stu_sno on student (sno)
2、为student表的sno列创建唯一聚集索引
create unipue clustered index ix_stu_sno on student(sno)
可以通过drop index语句删除索引,语法如下:
drop index table_or_view_name.index_name
drop index 表名.索引名
eg:
drop index 员工信息表.index_单位部门
drop index 员工信息表.index_性别
数据越多,效果越明显