实 验 一 基本表的定义、删除与修改
一、 实验目的:
熟练掌握基本表的定义、删除与修改,为后继学习作准备。
二、 实验属性(验证性)
(1) 了解并掌握SQL查询分析器及企业管理器的使用;
(2) 掌握基本表的定义、删除与修改。
三、 实验仪器设备及器材
1. 安装有windows操作系统计算机。
2. 安装有Oracle11g和SQL Server的计算机。
3. 安装有Visual Studio .net和Java编译器(eclipse、Netbean等)的编译器。
4. 计算机具备网络环境。
四、 实验要求(预习、实验前、实验中、实验后等要求)
1. 预习教材第三章,熟悉SQL语句。
2. 熟悉.net、Java或PowerBuilder、Delphi 开发环境。
3. 能够熟练掌握.net、Java或PowerBuilder、Delphi环境下的数据库的编程。 五、实验原理
SQL语言应用。
六、实验步骤:
(1) 启动Oracle的SQL Developer或者SQL Plus,或者SQL Server 查询分析器;
(2) 对于Oracle11g的SQL Plus需要进行登录,对于Oracle11g的SQL Developer需要进行建立连接。
如果选择SQL SERVER查询分析器,需要选择数据库;
(3) 验证如下例子;
1 熟悉SQL Server数据库服务器
1.1 熟悉SQL Server数据库服务器环境,熟练掌握数据字典。
1.2 从网上下载数据库文件(.MDL、.LDF),进行数据库附加操作。并在操作系统下将数据库数据文件(.MDL、.LDF)拷贝到U盘上。
1.3 从网上下载数据库数据(.XLS格式),将数据导入到数据库。并进行导出(导出格式大于三种)。
3.4 建立数据库登录用户。
2、熟悉Oracle数据库服务器
2.1熟悉Oracle数据库服务器环境,熟练掌握数据字典。
2.2 熟练掌握SQL PLUS的使用。
3.3 熟练掌握SQL Developer的使用。
3.4 本实验可以使用SQL PLUS也可以使用SQL Developer。
2 定义基本表(Create)
先画出中原工学院学生选课ER图,在学生选课系统中一名学生可以选修多门课程,一门课程可由多名学生选修,一名学生选修一门课程参加考试就有一个成绩。将ER图转换为逻辑模型并进行一下操作。并在system模式下创建以下3个表:
例2.1 建立学生表Stu,每个属性名的意义为Sno-学号、Sname-姓名、Ssex-性别、Sage-年龄、Sdept-所在系。这里要求Sno和Sname不能为空值,且取值唯一。Sno为主码。
CREATE TABLE Stu
(
Sno CHAR(10) NOT NULL PRIMARY KEY,
Sname CHAR(20) NOT NULL UNIQUE,
Ssex CHAR(10),
Sage INTEGER,
Sdept CHAR(20)
);例2.2 建立课程表Cose,其属性名意义分别为Cno-课程号, Cname-课程名, Cpno-先修课程号, Credit-学分。Cno为主码。
CREATE TABLE Cose
(
Cno CHAR(10) PRIMARY KEY,
Cname CHAR(10),
Cpno CHAR(10),
Credit INTEGER
);
例2.3 建立成绩表StuSC。其中的属性名意义分别为Sno-学号,Cno-课程号和Grade-考试成绩。Sno和Cno为主码,Sno和Cno分别为外码。
分别查询上面创建的3个表的信息以及表的定义。
CREATE TABLE StuSC
(
Sno CHAR(10),
Cno CHAR(10),
Grade INTEGER,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Stu(Sno),
FOREIGN KEY(Cno) REFERENCES Cose(Cno)
);
3 修改基本表(Alter)
例3.1 向基本表Stu中增加“入学时间”属性列,其属性名为RegisterDate,数据类型为DATE型。
ALTER TABLE Stu
ADD (RegisterDate date);
Alter table Turing.student
Add (RegisterDate date) ;
例3.2 删除Student表的属性列RegisterDate。
ALTER TABLE Stu
DROP COLUMN RegisterDate;
Alter table turing.stu
Drop column RegisterDate cascade constraints;
说明:为了保证后面例子能够顺利运行,请大家一定将属性列RegisterDate从Stu表中删除。
例3.3 将Sage(年龄)的数据类型改为SMALLINT型。
ALTER TABLE Stu
MODIFY Sage SMALLINT;
Alter table turing.stu
Modofy sage smallint; //要缩小精度,该列值必须为空
例3.4 将Stu表的属性列RegisterDate名修改为RegDate,其它不变。
Alter table turing.stu
Rename column RegisterDate to RegDate;
例3.5 增加Sname(姓名)必须取唯一值的约束。
ALTER TABLE Stu
ADD CONSTRAINT cons_Sname
UNIQUE (Sname);
alter table turing.stu
add constraint cons_sname unique(sname);
添加唯一性约束格式:
ALTER TABLE 表名
ADD [ CONSTRAINT 约束名 ]
UNIQUE ( [, … n] )
例3.6 删除Sname(姓名)必须取唯一值的约束。
Alter table turing.stu
Drop constraint cons_sname;
例3.7 表中添加PRIMARY KEY 约束
Alter table turing.stusc
Add constraint PK_SC
PRIMARY KEY (sno,cno);
格式:
ALTER TABLE 表名
ADD [ CONSTRAINT 约束名 ]
PRIMARY KEY ( 列名 [, … n ] )
例3.8 StuSC表中添加FORENGN KEY 约束
alter table turing. stusc
add constraint fk_sc
foreign key (sno) references turing.stu(sno)
foreign key (cno) references turing.cose(cno);
格式:
ALTER TABLE 表名
ADD [ CONSTRAINT 约束名 ]
FOREIGN KEY ()
REFERENCES 引用表名 ()
例3.9定义SC表中grade默认值为0;alter table turing. stusc
modify (grade default 0)
例3.10定义SC表中grade最小值为0,最大值为100;alter table turing. stusc
add constraint chk_grade1
check ((0
以上的约束条件都可以通过以下操作语句查看:
SQL>desc dba_constraints
SQL>desc dba_cons_columns
SQL> select distinct column_name
from dba_cons_columns cu, dba_constraints au
where cu.constraint_name = au.constraint_name and
au.constraint_type = 'R' AND cu.table_name = 'SC'
其中: V:check option
R:Foreign key
U:Unique
P:Primary key
C:Check or Not Null
O:ReadOnly
4 删除基本表
例4.1 删除Stu表(注:能直接删除student表吗?为什么?)。
不能
例4.2 删除cose表(注:能直接删除course表吗?为什么?)。
不能
例4.3 删除StuSC表。
说明:此表删除后,请立即用例3.1将其建立起来,以便后面的例子使用。
实 验 一 基本表的定义、删除与修改
一、 实验目的:
熟练掌握基本表的定义、删除与修改,为后继学习作准备。
二、 实验属性(验证性)
(1) 了解并掌握SQL查询分析器及企业管理器的使用;
(2) 掌握基本表的定义、删除与修改。
三、 实验仪器设备及器材
1. 安装有windows操作系统计算机。
2. 安装有Oracle11g和SQL Server的计算机。
3. 安装有Visual Studio .net和Java编译器(eclipse、Netbean等)的编译器。
4. 计算机具备网络环境。
四、 实验要求(预习、实验前、实验中、实验后等要求)
1. 预习教材第三章,熟悉SQL语句。
2. 熟悉.net、Java或PowerBuilder、Delphi 开发环境。
3. 能够熟练掌握.net、Java或PowerBuilder、Delphi环境下的数据库的编程。 五、实验原理
SQL语言应用。
六、实验步骤:
(1) 启动Oracle的SQL Developer或者SQL Plus,或者SQL Server 查询分析器;
(2) 对于Oracle11g的SQL Plus需要进行登录,对于Oracle11g的SQL Developer需要进行建立连接。
如果选择SQL SERVER查询分析器,需要选择数据库;
(3) 验证如下例子;
1 熟悉SQL Server数据库服务器
1.1 熟悉SQL Server数据库服务器环境,熟练掌握数据字典。
1.2 从网上下载数据库文件(.MDL、.LDF),进行数据库附加操作。并在操作系统下将数据库数据文件(.MDL、.LDF)拷贝到U盘上。
1.3 从网上下载数据库数据(.XLS格式),将数据导入到数据库。并进行导出(导出格式大于三种)。
3.4 建立数据库登录用户。
2、熟悉Oracle数据库服务器
2.1熟悉Oracle数据库服务器环境,熟练掌握数据字典。
2.2 熟练掌握SQL PLUS的使用。
3.3 熟练掌握SQL Developer的使用。
3.4 本实验可以使用SQL PLUS也可以使用SQL Developer。
2 定义基本表(Create)
先画出中原工学院学生选课ER图,在学生选课系统中一名学生可以选修多门课程,一门课程可由多名学生选修,一名学生选修一门课程参加考试就有一个成绩。将ER图转换为逻辑模型并进行一下操作。并在system模式下创建以下3个表:
例2.1 建立学生表Stu,每个属性名的意义为Sno-学号、Sname-姓名、Ssex-性别、Sage-年龄、Sdept-所在系。这里要求Sno和Sname不能为空值,且取值唯一。Sno为主码。
CREATE TABLE Stu
(
Sno CHAR(10) NOT NULL PRIMARY KEY,
Sname CHAR(20) NOT NULL UNIQUE,
Ssex CHAR(10),
Sage INTEGER,
Sdept CHAR(20)
);例2.2 建立课程表Cose,其属性名意义分别为Cno-课程号, Cname-课程名, Cpno-先修课程号, Credit-学分。Cno为主码。
CREATE TABLE Cose
(
Cno CHAR(10) PRIMARY KEY,
Cname CHAR(10),
Cpno CHAR(10),
Credit INTEGER
);
例2.3 建立成绩表StuSC。其中的属性名意义分别为Sno-学号,Cno-课程号和Grade-考试成绩。Sno和Cno为主码,Sno和Cno分别为外码。
分别查询上面创建的3个表的信息以及表的定义。
CREATE TABLE StuSC
(
Sno CHAR(10),
Cno CHAR(10),
Grade INTEGER,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Stu(Sno),
FOREIGN KEY(Cno) REFERENCES Cose(Cno)
);
3 修改基本表(Alter)
例3.1 向基本表Stu中增加“入学时间”属性列,其属性名为RegisterDate,数据类型为DATE型。
ALTER TABLE Stu
ADD (RegisterDate date);
Alter table Turing.student
Add (RegisterDate date) ;
例3.2 删除Student表的属性列RegisterDate。
ALTER TABLE Stu
DROP COLUMN RegisterDate;
Alter table turing.stu
Drop column RegisterDate cascade constraints;
说明:为了保证后面例子能够顺利运行,请大家一定将属性列RegisterDate从Stu表中删除。
例3.3 将Sage(年龄)的数据类型改为SMALLINT型。
ALTER TABLE Stu
MODIFY Sage SMALLINT;
Alter table turing.stu
Modofy sage smallint; //要缩小精度,该列值必须为空
例3.4 将Stu表的属性列RegisterDate名修改为RegDate,其它不变。
Alter table turing.stu
Rename column RegisterDate to RegDate;
例3.5 增加Sname(姓名)必须取唯一值的约束。
ALTER TABLE Stu
ADD CONSTRAINT cons_Sname
UNIQUE (Sname);
alter table turing.stu
add constraint cons_sname unique(sname);
添加唯一性约束格式:
ALTER TABLE 表名
ADD [ CONSTRAINT 约束名 ]
UNIQUE ( [, … n] )
例3.6 删除Sname(姓名)必须取唯一值的约束。
Alter table turing.stu
Drop constraint cons_sname;
例3.7 表中添加PRIMARY KEY 约束
Alter table turing.stusc
Add constraint PK_SC
PRIMARY KEY (sno,cno);
格式:
ALTER TABLE 表名
ADD [ CONSTRAINT 约束名 ]
PRIMARY KEY ( 列名 [, … n ] )
例3.8 StuSC表中添加FORENGN KEY 约束
alter table turing. stusc
add constraint fk_sc
foreign key (sno) references turing.stu(sno)
foreign key (cno) references turing.cose(cno);
格式:
ALTER TABLE 表名
ADD [ CONSTRAINT 约束名 ]
FOREIGN KEY ()
REFERENCES 引用表名 ()
例3.9定义SC表中grade默认值为0;alter table turing. stusc
modify (grade default 0)
例3.10定义SC表中grade最小值为0,最大值为100;alter table turing. stusc
add constraint chk_grade1
check ((0
以上的约束条件都可以通过以下操作语句查看:
SQL>desc dba_constraints
SQL>desc dba_cons_columns
SQL> select distinct column_name
from dba_cons_columns cu, dba_constraints au
where cu.constraint_name = au.constraint_name and
au.constraint_type = 'R' AND cu.table_name = 'SC'
其中: V:check option
R:Foreign key
U:Unique
P:Primary key
C:Check or Not Null
O:ReadOnly
4 删除基本表
例4.1 删除Stu表(注:能直接删除student表吗?为什么?)。
不能
例4.2 删除cose表(注:能直接删除course表吗?为什么?)。
不能
例4.3 删除StuSC表。
说明:此表删除后,请立即用例3.1将其建立起来,以便后面的例子使用。