一:定义基本表和完整性约束的实现
1、使用CREATE TABLE 语句,用户可以创建一个表结构,还可以为某个域设定缺省值。
定义基本表
CREATE TABLE <表名>
( <列名><数据类型> [列级完整性约束条件]
[ ,<列名><数据类型> [列级完整性约束条件]...]
[ ,<表级完整性约束条件>] );
语法说明:
表名:所要定义的基本表的名字。
列名:表由一个或多个属性(列)组成。建表时通常需要定义列信息及每列所使用的数据类型,列名在表内必须为唯一的,一个表至少包 含一个列。
数据类型:定义表的各个列(属性)时需指明其数据类型和长度,不同的数据库管理系统支持的数据类型不完全相同,应根据实际使用 的DBMS来确定。
列级完整性约束条件:只应用到一个列的完整性约束条件
表级完整性约束条件:应用到多个列的完整性约束条件。
2、语句
--建立学生表student
create table student
(
sno char(5) primary key, /*设置主键*/
sname char(20), /*sname取唯一值*/
ssex char(2),
sage smallint, /*smallint:4字节整数/2字节整数,8字节/4字节,存放货币类型,值为-2^63~2^63-1*/
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(先修课)是外码,被参照表是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), /* 表级完整性约束条件,Sno是外码,被参照表是Student */
foreign key (cno) references course(cno) /* 表级完整性约束条件, Cno是外码,被参照表是Course */
)
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 /*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
--后记:我喜欢逻辑、系统性的学习知识,以上是我为自己总结的最基础、简单的SQL,分享下,也虚心接受各位的指教喽!@_@