一、实验目的
1. 熟悉数据表的特点,理解数据库模式的概念;
2. 了解主键约束、外键约束、UNIQUE约束和CHECK约束的创建和应用; 3. 熟悉在Management Studio中创建、编辑及删除数据表; 4. 熟悉使用T-SQL语句创建、修改及删除数据表; 二、实验环境
已安装SQL Server 2005 企业版的计算机; 三、实验学时
2学时 四、实验要求
1. 了解表的结构特点;
2. 了解SQL Server的基本数据类型; 3. 了解各种数据完整性约束; 4. 熟悉使用T-SQL语法; 5. 完成实验报告。
五、实验准备知识(也可参考SQL Server联机丛书)
1. 创建表时一定要指定表名,名个列的列名,数据类型和长度。同时也可为某个列指定是
否允许为空(NULL|NOT NULL),列级约束(PRIMARY KEY|UNIQUE|FOREIGN KEY|CHECK),默认值,标识列以及表级约束。
2. 命令方式下创建数据表 (命令中用方括号[]括起的部分为可选项,|表示二者选其一)
CREATE TABLE 表名
( 列名1 数据类型[(长度)]
[ NULL|NOT NULL] //设置列是否为空 [ [CONSTRAINT constraint_name] DEFAULT 默认表达式
| [ IDENTITY [ ( 标识种子 ,增长值) ] //设置列的默认值或是否为标识列 ]
[ [CONSTRAINT constraint_name] PRIMARY KEY
| UNIQUE
| [FOREIGN KEY] REFERENCES 参照表(参照列) //设置列级约束
| CHECK (逻辑表达式) ]
[,列名2„] //定义其它的列 [,表级约束] //定义表级约束
)
3. 命令方式下修改表(ALTER TABLE命令中有三个子句,一个命令中只能使用一个子句) ALTER TABLE 表名
ALTER COLUMN 列名 数据类型[(长度)]//修改表中已有的某个列的类型或长度 | ADD 列定义 //添加列,与创建表时的列定义一致
| 表级约束 //添加表级约束,与创建表时的表级约束一致 [ ,...n ] //一个ADD子句中允许添加多项
| DROP [ CONSTRAINT ] 约束名 //删除表中指定名称的约束
| COLUMN 列名 //删除表中指定名称的列
[ ,...n ] //一个DROP子句中允许删除多项
4. 命令方式下删除表
DROP TABLE 表名[ ,...n ] // DROP命令中可删除多个表
六、实验示例
两个示例:
一个是书上的学生选课数据库S_T,S_T数据库中有学生表student,课程表course和学生
选课表sc。各表的结构如下: 学生表student Sno Sname Ssex Sage Sdept char(9) varchar(20) char(2) smallint varchar(20) Not null Not null Not null Not null Not null primary key 学号 姓名 性别 年龄 系别 课程表course Cno Cname Cpno Ccredit char(4) varchar(40) char(4) smallint Not null Not null Not null primary key 课程号 课程名 先行课 学分 学生选课表sc Sno Cno Grade char(9) char(4) smallint Not null Not null primary key primary key 学号 课程号 成绩 另一个示例是某公司的产品销售数据库company,company数据库中存在人事表employee、
客户表customer、销售表sales、销售明细表sale_item、产品表product。各表的结构如下: 员工人事表employee emp_no emp_name char(5) varchar(10) Not null Not null primary key 员工编号 员工姓名 sex dept title date_hired birthday salary telephone addr 客户表customer cust_id cust_name addr tel_no zip 销售主表sales order_no cust_id sale_id tot_amt order_date char(2) varchar(10) varchar(10) datetime datetime int varchar(20) varchar(50) Not null Not null Not null Not null Null Not null Null null 性别 所属部门 职称 雇佣日 生日 薪水 电话 住址 char(5) varchar(20) varchar(40) varchar(20) char(6) Not null Not null Not null Not null null primary key 客户号 客户名称 客户住址 客户电话 邮政编码 int char(5) char(5) numeric(9,2) datetime Not null Not null Not null Not null Not null primary key 订单编号 客户号 业务员编号 订单金额 订货日期 销货明细表sale_item order_no prod_id qty unit_price order_date int char(5) int numeric(7,2) datetime Not null Not null Not null Not null null primary key primary key 订单编号 产品编号 销售数量 单价 订单日期 产品名称表product prod_id prod_name
1.创建表及相应的约束 create table employee(
emp_no char(5) not null check(emp_no like '[E-F][0-9][0-9][0-9][0-9]'), emp_name char(10) not null,
char(5) varchar(20) Not null Not null primary key 产品编号 产品名称 emp_sex char(1) not null check(emp_sex in ('m','f')), emp_phone char (13) not null, emp_add varchar(60) not null,
emp_salary char(5) not null check (emp_salary between 60000 and 80000) ) go 2.修改表
alter table employee
add constraint ck_salary check (salary between 1000 and 10000)
七、实验内容
请分别使用Management Studio及T-SQL语句完成以下内容: 针对S_T数据库:
1. 依照表结构,创建student表,设置Sno为主键;在Sno列上创建核查约束,要求学号各个
位上只能取数字字符;在Ssex列上创建核查约束,要求性别只能取“男”或“女”;在Sage 列上创建核查约束,要求学生的年龄只能在14至38之间。
2. 在表student中增加新字段 “班级名称(sclass)“,类型为varchar,长度为10; 3. 在表student中删除字段“班级名称(sclass)”;
4. 修改表student中字段名为“sname”的字段长度由原来的20改为10;
5. 依照表结构,创建course表,设置列Cno为主键;在Cno列上创建核查约束,要求课程号只
能取数字字符。
6. 依照表结构,创建sc表,设置主键为Sno与Cno的组合;在Grade列上创建核查约束,限定
成绩只能在0-100。
7. 修改course表,在表中为Cpno列添加一外键约束Fk_Cpno,它参照了course表的主键Cno。 8. 修改sc表,在表中为Sno添加一外键约束Fk_Sno,它参照了student表中的主键Sno;为Cno
添加外键约束Fk_Cno, 它参照了course表中的主键Cno。 9. 删除数据表student。 针对company数据库:
1. 在数据库company中依照表结构创建以上五张表,并设置各表的主键。
2. 在销售主表sales中添加字段“发票号码” invoice_no,char(10),NOT NULL。 3. 添加外键约束:
a) 在销售主表sales的业务员编号字段sale_id上添加外键约束,参照字段为员工表
employee中的字段员工编号emp_no,约束名为FK_sale_id。
b) 在销售主表sales的客户号字段cust_id上添加外键约束,参照字段为客户表customer
中的字段客户号cust_id,约束名为FK_cust_id。
c) 在销售明细表sale_item的订单编号字段order_no上添加外键约束,参照字段为销售主
表sales中的字段订单编号order_no,约束名为FK_order_no。
d) 在销售明细表sale_item的产品编号字段prod_id上添加外键约束,参照字段为产品名
称表product中的产品编号字段prod_id,约束名为FK_prod_id。
4. 添加核查约束:
a) 将员工表employee中的薪水字段salary的值限定在1000至10000间,约束名为CK_salary。
b) 将员工表employee中的员工编号字段emp_no设定为以“E”字母开头, 后面跟5位数的编号,约束名为CK_emp_no。
c) 将员工表employee中的性别字段设定这取值只能是“男”和“女”。约束名为CK_sex。 d) 将销售主表sales中的发票号码字段invoice_no设定为以“I”字母开头,后面跟9位
数的编号,约束名为CK_inno。
5. 为销售主表sales中的字段发票号码invoice_no设置为唯一约束,约束名为UN_inno。 6. 删除销售主表sales中的字段发票号码invoice_no。
七、出现问题及解决方法
如出现数据表无法创建或删除等问题,请分析原因,并如何解决?
因篇幅问题不能全部显示,请点此查看更多更全内容