《数据库原理》实验班级:学号:姓名:实验1建立基本表和数据完整性实验目的:1.掌握表(关系)和索引的建立方法;2.掌握表结构(关系模式)的修改方法;3.实践DBMS提供的数据完整性功能,加深对数据完整性的理解。
实验内容:1.在studentdb数据库中利用查询分析器创建以下3个表,同时完成数据完整性的定义(实体完整性、参照完整性和用户定义的域完整性):student(学生信息表):sc实验代码:createdatabase studentdbuse studentdbgocreatetable student(sno char(10)notnull primarykey,--学号sname char(10)notnull,--姓名ssex char(2)null,--性别sage smallint null check(sage>=12),--年龄sdept char(15),--系名)createtable course(cno Char(2)notnull primarykey,--课程号cname Char(20)null,-- 课程名称cpno Char(2)null,--先行课号ccredit smallint null,--学分)createtable sc(sno char(10)notNULL,--学号cno char(2)notNULL,--课程号grade Decimal(5,1)NULL check(grade>=0AND grade<=100),--成绩primarykey(sno,cno),/*主码由两个属性构成,必须作为表级完整性进行定义*/foreignkey(sno)references student(sno),/*表级完整性约束条件,sno是外码,被参照表是student*/foreignkey(cno)references course(cno),/*表级完整性约束条件,cno是外码,被参照表是course*/)go2.在spjdb数据库中利用查询分析器创建以下4个表,同时完成数据完整性的定义(实体完整性、参照完整性和用户定义的域完整性):S(供应商信息表):PJcreatedatabase spjdbuse spjdbgocreatetable S(sno char(2)NOTNULL primarykey,--供应商号sname char(10)NOTNULL,--供应商名称status smallint NULL CHECK(status>0),--供应商状态city char(10)NULL,--所在城市)createtable P(pno char(2)NOTNULL primarykey,--零件号pname char(10)NOTNULL,--零件名称color char(2)NULL,--颜色weight smallint NULL CHECK(weight>0),--重量)createtable J(jno char(2)NOTNULL PRIMARYKEY,--工程项目号jname char(10)NOTNULL,--工程项目名称city char(10)NULL,--所在城市)createtable SPJ(sno Char(2)NOTNULL,--供应商号pno Char(2)NOTNULL,--零件号jno Char(2)NOTNULL,--工程项目号qty smallint NULL CHECK(qty>0),--供应数量primarykey(sno,pno,jno),foreignkey(sno)references S(sno),/*表级完整性约束条件,sno是外码,被参照表是S*/foreignkey(pno)references P(pno),/*表级完整性约束条件,pno是外码,被参照表是P*/foreignkey(jno)references J(jno),/*表级完整性约束条件,jno是外码,被参照表是J*/)3.修改表结构,具体要求如下:(1)将表course的cname列的数据类型改为varchar(40)。
altertable coursealtercolumn cnamevarchar(40);(2)为表student增加一个新列:birthday(出生日期),类型为datetime,默认为空值。
altertable studentadd birthday datetimedefault null;4.分别建立以下索引(如果不能成功建立,请分析原因)(1)在student表的sname列上建立普通降序索引。
createindex sname on student(sname desc);(2)在course表的cname列上建立唯一索引。
createuniqueindex cname on course(cname);(3)在sc表的sno列上建立聚簇索引。
createCLUSTEREDindex sc on sc(sno)//不成功,系统默认给主键分配了一个聚簇索引(4)在SPJ表的sno(升序),pno(升序)和jno(降序)三列上建立一个普通索引。
createindex spj on spj(sno asc,pno asc,jno desc);实验2SQL数据操作实验目的:1.向实验1建立的表中添加数据(元组),掌握INSERT语句的用法;2.修改基本表中的数据,掌握UPDATE语句的用法;3.删除基本表中的数据,掌握DELETE语句的用法;4.体会数据完整性约束的作用,加深对数据完整性及其约束的理解。
实验内容:1.将教材P表中的数据添加到数据库studentdb中。
82use studentdbgoINSERTinto student(sno,sname,ssex,sage,sdept)values(,'李勇','男',20,'CS'); INSERTinto student(sno,sname,ssex,sage,sdept)values(,'刘晨','女',19,'CS'); INSERTinto student(sno,sname,ssex,sage,sdept)values(,'王敏','女',18,'MA'); INSERTinto student(sno,sname,ssex,sage,sdept)values(,'张立','男',29,'IS'); use studentdbgoINSERTinto course(cno,cname,cpno,ccredit)values(1,'数据库',5,4);INSERTinto course(cno,cname,cpno,ccredit)values(2,'数学',null,2);INSERTinto course(cno,cname,cpno,ccredit)values(3,'信息系统',1,4);INSERTinto course(cno,cname,cpno,ccredit)values(4,'操作系统',6,3);INSERTinto course(cno,cname,cpno,ccredit)values(5,'数据结构',7,4);INSERTinto course(cno,cname,cpno,ccredit)values(6,'数据处理',null,2); INSERTinto course(cno,cname,cpno,ccredit)values(7,'PASCAL语言',6,4);use studentdbgoINSERTinto sc(sno,cno,grade)values(,1,92);INSERTinto sc(sno,cno,grade)values(,2,85);INSERTinto sc(sno,cno,grade)values(,3,88);INSERTinto sc(sno,cno,grade)values(,2,90);INSERTinto sc(sno,cno,grade)values(,3,80);表中的数据添加到数据库spjdb中,体会执行插入操作时检查实体2.将教材P75完整性规则、参照完整性规则和用户定义完整性规则的效果。
use spjdbgoinsertinto S(SNO,SNAME,STATUS,CITY)VALUES('S1','精益',20,'天津');insertinto S(SNO,SNAME,STATUS,CITY)VALUES('S2','盛锡',10,'北京');insertinto S(SNO,SNAME,STATUS,CITY)VALUES('S3','东方红',30,'北京');insertinto S(SNO,SNAME,STATUS,CITY)VALUES('S4','丰泰盛',20,'天津');insertinto S(SNO,SNAME,STATUS,CITY)VALUES('S5','为民',30,'上海');use spjdbgoinsertinto P(PNO,PNAME,COLOR,WEIGHT)VALUES('P1','螺母','红',12);insertinto P(PNO,PNAME,COLOR,WEIGHT)VALUES('P2','螺栓','绿',17);insertinto P(PNO,PNAME,COLOR,WEIGHT)VALUES('P3','螺丝刀','蓝',14);insertinto P(PNO,PNAME,COLOR,WEIGHT)VALUES('P4','螺丝刀','红',14);insertinto P(PNO,PNAME,COLOR,WEIGHT)VALUES('P5','凸轮','蓝',40);insertinto P(PNO,PNAME,COLOR,WEIGHT)VALUES('P6','齿轮','红',30);use spjdbgoinsertinto J(jno,jname,city)values('J1','三建','北京');insertinto J(jno,jname,city)values('J2','一汽','长春');insertinto J(jno,jname,city)values('J3','弹簧厂','天津');insertinto J(jno,jname,city)values('J4','造船厂','天津');insertinto J(jno,jname,city)values('J5','机车厂','唐山');insertinto J(jno,jname,city)values('J6','无线电厂','常州');insertinto J(jno,jname,city)values('J7','半导体厂','南京');use spjdbgoinsertinto SPJ(sno,pno,jno,qty)values('S1','P1','J1',200);insertinto SPJ(sno,pno,jno,qty)values('S1','P1','J3',100);insertinto SPJ(sno,pno,jno,qty)values('S1','P1','J4',700);insertinto SPJ(sno,pno,jno,qty)values('S1','P2','J2',100);insertinto SPJ(sno,pno,jno,qty)values('S2','P3','J1',400);insertinto SPJ(sno,pno,jno,qty)values('S2','P3','J2',200);insertinto SPJ(sno,pno,jno,qty)values('S2','P3','J4',500);insertinto SPJ(sno,pno,jno,qty)values('S2','P3','J5',400);insertinto SPJ(sno,pno,jno,qty)values('S2','P5','J1',400);insertinto SPJ(sno,pno,jno,qty)values('S2','P5','J2',100);insertinto SPJ(sno,pno,jno,qty)values('S3','P1','J1',200);insertinto SPJ(sno,pno,jno,qty)values('S3','P3','J1',200);insertinto SPJ(sno,pno,jno,qty)values('S4','P5','J1',100);insertinto SPJ(sno,pno,jno,qty)values('S4','P6','J3',300);insertinto SPJ(sno,pno,jno,qty)values('S4','P6','J4',200);insertinto SPJ(sno,pno,jno,qty)values('S5','P2','J4',100);insertinto SPJ(sno,pno,jno,qty)values('S5','P3','J1',200);insertinto SPJ(sno,pno,jno,qty)values('S5','P6','J2',200);insertinto SPJ(sno,pno,jno,qty)values('S5','P6','J4',500);(1)实体完整性规则use spjdbgoinsertinto S(SNO,SNAME,STATUS,CITY)VALUES('S1','WWW',20,'WWW');//S1重复(2)参照完整性规则use spjdbgoinsertinto SPJ(sno,pno,jno,qty)values('S7','P6','J4',500);//S表里没有S7这条记录(3)用户定义完整性规则use spjdbgoinsertinto P(PNO,PNAME,COLOR,WEIGHT)VALUES('P7','齿轮','红',-30);//weight小于03.设计几个删除操作(3~5个),体会执行删除操作时检查参照完整性规则的效果。