SQL Server 数据定义语言(定义基本表、完整性约束实现、索引)
2012-07-11 12:28阅读:
一:定义基本表和完整性约束的实现
1、使用CREATE
TABLE 语句,用户可以创建一个表结构,还可以为某个域设定缺省值。 定义基本表
CREATE TABLE
<表名> ( <列名><数据类型>
[列级完整性约束条件] [
,<列名><数据类型>
[列级完整性约束条件]...] [
,<表级完整性约束条件>] ); 语法说明: 表名:所要定义的基本表的名字。
列名:表由一个或多个属性(列)组成。建表时通常需要定义列信息及每列所使用的数据类型,列名在表内必须为唯一的,一个表
至少包 含一个列。
数据类型:定义表的各个列(属性)时需指明其数据类型和长度,不同的数据库管理系统支持的数据类型不完全相同,应根据实际使用
的DBMS来确定。 列级完整性约束条件:只应用到一个列的完整性约束条件 表级完整性约束条件:应用到多个列的完整性约束条件。
2、语句
--建立学生表student create
table student (
sno char(5) primary
key, sname char(20),
ssex char(2), sage smallint,
sdept char(15) )
【在student表中,学号属性的列级完整性约束条件限制该列数据值不能为空(null),并且其值具有唯一性。该完整性约束是由RDBMS内部定义,性别属性的完整性约束由用户自己定义约束表达式,并对该约束命名为ssex。
该题目描述的约束实际上可以在建立表的过程中直接实现,具体语法如下: create
table student (
sno char(5) not
null unique, sname
char(20), ssex
char(2), sage smallint
default 20, sdept
char(15), constraint ssex
check( ssex in (‘男’,’女’)) )】
--查询student表 select
* from student
--建立课程表course create
table course (
cno char(4) primary
key,
cname char(20), cpno
char(4) foreign
key references course(cno),
【 或者 cpno char(4), foreign key
(cpno) references course(cno)】 ccredit
smallint ) select *
from course --建立学生选课表1
sc create table sc ( sno
char(5), cno
char(4), grade
smallint,
primary key(sno,cno) foreign
key (sno) references student(sno),
foreign key (cno) references
course(cno) )
select * from
sc
--建立学生选课表2 sc2 create
table sc2 (
sno char(5), cno
char(4), grade
smallint,
primary key(sno,cno), foreign
key(sno) references student(sno), foreign
key(cno) references course(cno) ) select
* from sc2 【
<1>上述中建立的student表中,其中学号属性为主键(primary
key),该完整性约束由用户自己定义约束名为PK_sno。实现语句如下:
alter table student add
constraint PK_sno primary
key(sno)
<2>建立的course表中,其中课程号属性为主键(primary
key),该完整性约束由用户自己定义约束名为PK_cno,先修课号(cpno)必需是存在的课程号或者为空,所以可以建成外键约束,
该完整性约束由用户自己定义约束名为FK_cpno。具体实现语句为: alter
table course add
constraint PK_cno primary
key(cno),
constraint PK_cpno foreign
key(cpno) references course(cno)
<3>建立的sc表上,(sno,cno)联合做主键。sno和cno单独做外键。如果建立表的过程中student表sno列已经建成主键,course表的cno已经建成主键则可以通过下列语句直接建表时实现
题目要求。 create table
sc ( sno
char(5) foreign
key references student(sno), cno
char(3) foreign
key references course(cno), grade
int,
constraint PK_sc primary
key (sno,cno) )
如果sc表已经建立,可以通过下面语句实现题目要求: alter
table sc
add constraint PK_sc primary
key (sno,cno)
, constraint FK_sno foreign
key(sno),
references student(sno),constraint PK_cno
roreign key(cno) references
cource(cno)
需要保证Student(Sno)和Course(Cno)已经建成主键。】 --向student中添加列(stept)时,不用column
alter table student add sdept1
char(20)
--在student表中增加入学时间 alter
table student add s_entrance
datetime
--修改student表中的sage数据类型 alter
table student alter
column sage int
--在course表中增加unique约束 alter
table course add
constraint c_cname
unique(cname)
--删除course表中的uniqu约束 alter
table course drop
constraint c_cname
--向student表中插入一条数据 insert
into
student(sno,sname,ssex)values('2012','小一','女')
--向student表的sdept属性加 not null 约束
delete from student alter
table student alter
column sdept char(20)
not null
--增加default(默认)约束 alter
table student add
constraint c_sage default 20
for sage
--check(核对) alter
table student add
constraint c_sstep check(ssex
in('男','女'))
insert into
student(sno,sname,ssex)values('20121','小二','男')
insert into
student(sno,sname)values('20100','小三')
select * from
student
--在student中,sno属性为主键(primary
key),该完整性约束由用户自己定义约束名为PK_sno.实现语句如下: alter
table student alter
column sno char(10)
not null alter
table student add
constraint PK_sno primary
key(sno)

二:索引
1、概念
索引是以表列为基础的数据库对象,它保存着表中排序的索引列,并且记录了索引列在数据表中的物理存储位置,实现了表中数据的逻辑排序,其主要目的是提高数据库管理系统的性能,加快
数据的查询速度和减少系统的响应时间。 2、作用
表的索引就是表中数据的目录。索引是建立在表上的,不能单独存在,如果删除表,则表上的索引将随之消失。
不使用索引,就需将数据文件分块,逐个读到内存中进行查找的比较操作。如果使用索引,则扫描索引文件,根据索引项找到元组的地址,然后再根据地址找到数据,由于索引文件很小,而且
索引有顺序,可以极大地提高查询的速度。 3、索引类型
(1)聚集索引聚簇索引是指数据表的物理顺序和索引表的顺序相同,它根据表中的一列或多列的值对表的物理数据页中的数据进行排序,然后再重新存储到磁盘上。每一个表只能有一个聚簇
索引,因为一个表的记录只能以一种物理顺序存放,在通常情况下,使用的都是聚簇索引。
(2)非聚集索引,表的物理顺序与索引顺序不同,即表的数据并不是按照索引列排序的。索引是有序的,而表中的数据是无序的。一个表可以同时存在聚簇索引和非聚簇索引,而且一个表可以
有多个非聚簇索引。
(3)唯一索引,唯一索引不允许两行具有相同的索引值。例如,如果在表中的“姓名”字段上建立了唯一索引,则以后输入的姓名将不能同名。
4、建立索引原则
在最经常查询的列上建立聚簇索引以提高查询效率; 经常更新的列不宜建立聚簇索引; 大表应当建索引,小表不必建索引,不宜建较多索引;
根据查询要求建立索引。对于一些查询频度高,实时性高的数据一定要建立索引; 主键列默认自动建立聚簇索引;
很少在查询中被引用的列不要建立索引; 包含较少的唯一值的列不要建立索引。 5、
<1>建立索引 语句格式: CREATE
[UNIQUE]
[CLUSTERED]
INDEX <索引名>
ON
<表名>(<列名>[<次序>][,<列名>[<次序>]
]…);
用<表名>指定要建索引的基本表名字 索引可以建立在该表的一列或多列上,各列名之间用逗号分隔
用<次序>指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC
UNIQUE表明此索引的每一个索引值只对应唯一的数据记录
(1)唯一值索引对于已含重复值的属性列不能建UNIQUE索引,对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值,这相当于增加了一个UNIQUE约束。
--为学生-课程数据库中的student,course,sc三个表建立索引。其中student表按学号升序建唯一索引,course表按课程号升序建唯一索引,sc表按学号升序和课程号降序建唯一索引。
create unique index stusno
on student(sno), create
unique index coucno
on course(cno), create
unique index scno on sc(sno
ASC,cno DESC) (2)聚簇索引,cluster表示要建立的索引是聚簇索引,建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放,也即聚簇索引的索引项顺序与表中记录的物理顺序一致。
--在student表的姓名列上建立聚族索引
create cluster index stusame
on student(sname)
在一个基本表上最多只能建立一个聚簇索引。聚簇索引的用途:对于某些类型的查询,可以提高查询效率;聚簇索引的适用范围:很少对基表进行增删操作、很少对其中的变长列进行修改操作。
<2>删除索引 DROP
INDEX
<索引名>;
索引一经建立,就由系统使用和维护它,不需用户干预。建立索引是为了减少查询操作的时间,但如果数据增删改频繁,系统会花费许多时间来维护索引。这时,可以删除一些不必要的索引。删除索引时,系统会同时从数据字典中删去有关该索引的描述。
--删除student表的stusname索引 drop
index stusname

kk--小感:我喜欢逻辑、系统性的学习知识,以上是我为自己总结的最基础、简单的SQL,分享下,也虚心接受各位的指教喔!