约束、索引、视图。
约束:(要求字段不能为空,必须填写内容,就是非空约束)
not null(非空约束)、unique(唯一性约束)、primary key(主键约束)、foreign(外键约束)、check(限制约束)、default(默认约束)
一.check(限制约束)
1.设置总工资必须=工资+奖金
2.年龄字段设置:年龄>20 and <30
二.主键约束
1.主键,唯一标识一条记录,一个表中不允许出现多个主键不允许为空,主键的作用是用来保证数据的完整性,主键只能有一个。
比如,一条记录包括身份证、姓名、年龄。身份证是唯一确定你这个人的,其他都有可能有重复,所以身份证号是主键。
三、外键
1.表的外键是另一表的主键,外键可以有重复的,可以是空值。
外键的作用是用来和其他表建立联系用的,一个表可以有多个外键。比如,A表中的一个字段,是B表的主键,
那他就可以是A表的外键。
索引
索引的好处:可以加速数据的检索,可以加速链接。创建唯一索引,保证表中的数据不重复。
数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书。
在数据库中,数据库程序使用索引可以重啊到表中的数据,而不必扫描整个表。书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表。
索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法。
索引的利弊:查询执行的大部分开销是I/O,使用索引提高性能的一个主要目标是避免全表扫描,因为全表扫描需要从磁盘上读取表的每一个数据页,如果有索引指向数据值,
则查询只需要读少数次的磁盘就行啦。所以合理的使用索引能加速数据的查询。但是索引并不总是提高系统的性能,带索引的表需要在数据库中占用更多的存储空间,
同样用来增删数据的命令运行时间以及维护索引所需的处理时间会更长。所以要合理使用索引,及时更新去除次优索引。
创建索引公式
Create [Unique][Clustered][NonClustered] Index index_name On [Table|View] (Column[Asc|Desc],......)
创建 唯一索引 簇索引 非簇索引 索引(索引的名称) 表 视图 列的名称 正序 倒叙
(默认为簇索引) (默认为正序排列)
(以上索引类型皆为索引可选择类型)
聚集索引和非聚集索引
聚集索引:对表的物理数据叶进行索引排序,把表的物理的物理数据进行有规则的排序,会在硬盘上进行重新存储。
聚集索引是跟数据混合在一起的,在叶子节点中存储的是实际数据,由于聚集索引是对表中的数据进行一一排序,
因此,用聚集索引查找的数据的时候,查找数据比较快。聚集索引所需要的空间特别大。相当于表中数据所占空间的120%。
一个表中只能有一个聚集索引。
非聚集索引:非聚集索引拥有与表中的数据完全分离的结构,使用非聚集索引不用将物理数据叶中的数据进行排序,原有数据不动,
另外建一个索引的结构
物理数据相当于仓库里放的货物,非聚集索引相当于建立一个账本。使用非聚集索引不需要对物理数据进行排序,
非聚集索引中叶子节点存储的是非聚集索引关键字的值,另外一个是行定位器,数据的记录就是行,
行定位器的结构和存储内容取决于数据的存储方式。 非聚集索引的行定位器和关键字的值,用一定的方式进行排序。
由于非聚集索引,使用的索引页的存储,所以说比聚集索引需要更多的空间。检索效率也比较低。因为是单独进行存储的。
非聚集索引页有一个优点:因为聚集索引在一个表中只能建一个,非聚集索引在一个表中可以建多个。理论上可以在一个表中建立249个。
无论是聚集索引还是非聚集索引,它们都可以设置成唯一索引。
索引的另外一种分类:唯一索引和非唯一索引
唯一索引:确保索引字段的值无重复,一个字段把它设置成索引了,此字段不得有重复值。
非唯一索引:允许保存在列中的数据有重复值。非唯一索引比唯一索引在提取数据的时候带来更大的开销。需要更大的资源。
单列索引和多列索引
单列索引:将单独的一个字段设置为索引,例如将;姓名、职员编号
多列索引:把多个字段组合建成索引,例如把工资和奖金之和建立成索引。又称为组合索引。
exec sp_helpindex 网站职员表 \查询该表中创建了多少个索引
create index new_index on 网站职员表(工资 desc)\创建一个索引在网站职员表(工资的字段中),索引的名字是new_index,并进行倒叙(desc)排序。
如何创建唯一索引
create unique index new_index2 on 网站职员表(姓名)\在网站职员表中,(姓名)字段中创建一个唯一索引,索引的名字叫 new_index2
(唯一)
索引如何重命名
exec sp_rename'网站职员表.new_index','new_index重命名后','index' \给网站职员表中的 new_index进行重命名,更名为(new_index重命名后)。
(执行)(重命名) (哪个表,索引的名称)(命名后索引的名字)
如何删除索引
drop index 网站职员表.新new_index \删除索引,删除网站职员表中的(新new_index)
视图的分类(基于表而存在的)
修改视图中数据的同时,表中的数据也会随之更改。
视图和表非常相似,在正常浏览的情况下和表几乎没有区别,视图和表的不同点:表是物理存在的,而视图可以认为是一个虚拟表,
(例如之前所说的虚拟表,有些查询显示出的结果,就是虚拟表,从一个或多个表中查询出来符合条件的记录,放在一起重新组合起来形成一个新的虚拟表,这就是视图)
标准视图:一般来说组合了一个或多个表中的数据,大多数视图应用都是在此基础之上进行的。
索引视图:为视图创建一个唯一的聚集索引,那么该视图就是索引视图。(创建索引,既可以基于表,也可以基于视图),
基于视图来创建聚集索引,那么这个视图就是索引视图,该类视图是一个具体化的视图,已经用来经过计算并将数据存于服务器上。
索引视图可以显著的提高某类型的查询性能。
分区视图:是在数据库分区的基础上建立的视图,该视图可以在一台或多台服务器上水平连接一组成员表中的分区数据,使对数据的处理犹如对一个表进行操作,
可以把数据分配到一台或多台服务器进行一个水平连接,在处理多台服务器的数据的时候,就好像处理一个表一样,这就是分区视图。
分区视图又分为:本地分区视图和分布式分区视图。
视图的优点和缺点:
在数据库开发使用视图的优点有:操作简单
1.视图是为了查询方便!也就是多个表总结!但不能对视图进行增删改!
2.用视图可以隐藏一定的信息,用过滤后查询出来的数据组成视图 可以访问表中的子集,可以访问表中行的子集。
3.可以重命名列名,在表中有些列名定义没有代表意义,例如"abc",为了让用户看到列名就可以知道是什么数据,可以在组建视图时重命名列名。
4.可以快速访问两表或多表连接所组成的数据。可以把一些多表的数据组合在一起,可以快速读取用聚合函数返回的结果集。
5.有了视图程序可以建立视图上
6.可以合并分离的数据,创建分区视图。当数据量大的时候,这时我们就可以使用union关键字,将各分公司的数据合并为一个视图。
7.视图还可以用作跨表及跨域,在两台数据库之间做桥梁链接的作用。总的说视图可以提高安全性可以提高查询速度。
缺点:
在SQL server必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么即使是视图的一个简单查询,SQL server也把它变成
一个复杂的结合体,需要花费一定的时间,性能不高。
在后期的维护上数据库的表结构变了也会影响视图的改变,维护繁琐。所以在定义数据库的时候,要合理的使用视图。
!!!!创建视图的方式
利用T-SQL语句来创建视图
Create View view_name as select_statement
(创建)(视图)(视图名字)
create view test_view2 as select 姓名,年龄,职员编号 from 网站职员表 where 工资>2800
\从网站职员表中查询出工资>2800所有员工的姓名,年龄,职员编号并创建一个视图,视图的名字为test_view2。
alter view test_view2 as select * from 网站职员表 where 工资<2800
\修改视图test_view2 视图里面的内容为在网站职员表中查找出工资<2800的员工信息
drop view test_view2 \删除视图,视图的名字为test_view2