实验1数据库定义实验目的1、掌握SQL数据定义功能:数据库定义、表的定义、索引定义。实验内容1、创建spj数据库(1)供应商表S列名说明数据类型约束SNO供应商号CHAR(6)PRIMARYKEYSNAME供应商名VARCHAR(20)NOTNULLSTATUS供应商状态VARCHAR(50)CITY所在城市VARCHAR(50)CREATEDATABASESPJ;CREATETABLES(SNOCHAR(6)PRIMARYKEY,SNAMEVARCHAR(20)NOTNULL,STATUSVARCHAR(50),CITYVARCHAR(50));(2)零件表P列名说明数据类型约束PNO零件号CHAR(6)PRIMARYKEYPNAME零件名VARCHAR(20)NOTNULLCOLOR颜色CHAR(2)WEIGHT重量NUMERIC(9,2)CHECK(WEIGHT0ANDWEIGHT=100)CREATETABLEP(PNOCHAR(6)PRIMARYKEY,PNAMEVARCHAR(20)NOTNULL,COLORVARCHAR(2),WEIGHTNUMERIC(9,2)CHECK(WEIGHT0ANDWEIGHT=100));(3)工程项目表J列名说明数据类型约束JNO项目号CHAR(6)PRIMARYKEYJNAME项目名VARCHAR(20)NOTNULLCITY城市VARCHAR(50)CREATETABLEJ(JNOCHAR(6)PRIMARYKEY,JNAMEVARCHAR(20)NOTNULL,CITYVARCHAR(50));(4)供应商情况表SPJ列名说明数据类型约束SNO供应商号CHAR(6)NOTNULLPNO零件号CHAR(6)NOTNULLJNO项目号CHAR(6)NOTNULLQTY供应数量SMALLINTDEFAULT100CREATETABLESPJ(SNOCHAR(6)NOTNULL,PNOCHAR(6)NOTNULL,JNOCHAR(6)NOTNULL,QTYSMALLINTDEFAULT100);2、创建school数据库(1)学生表Student列名说明数据类型约束SNO学号CHAR(7)主码SNAME姓名CHAR(10)NOTNULLSSEX性别CHAR(2)取“男”或“女”SAGE年龄SMALLINT取值15-45SDEPT所在系VARCHAR(20)默认“计算机系”CREATEDATABASESCHOOL;CREATETABLEStudent(SNOCHAR(7)PRIMARYKEY,SNAMECHAR(10)NOTNULL,SSEXCHAR(2)CHECK(SSEX=’男’ORSSEX=’女’),SAGESMALLINTCHECK(SAGE’15’ANDSAGE’45’),SDEPTVCGHAR(20)DEFAULT'计算机系');(2)课程表Course列名说明数据类型约束CNO课程号CHAR(10)主码CNAME课程名VARCHAR(20)NOTNULLCCREDIT学分SMALLINT大于0SEMSTER学期SMALLINT大于0PERIOD学时SMALLINT大于0CREATETABLECourse(CNOCHAR(10)PRIMARYKEY,CNAMEVARCHAR(20)NOTNULL,CCREDITSMALLINTCHECK(CCREDIT’0’),SEMSTERSMALLINTCHECK(SEMSTER’0’),PERIODSMALLINTCHECK(PERIOD’0’));(3)选课表SC列名说明数据类型约束SNO学号CHAR(7)主码,引用Student的外码CNO课程号CHAR(10)主码,引用Course的外码GRADE成绩SMALLINT大于0CREATETABLESC(SNOCHAR(7),CNOCHAR(10),GradeSMALLINTCHECK(GRADE’0’),PRIMARYKEY(SNO,CNO),,FOREIGNKEY(SNO)REFERENCESStudent(SNO),FOREIGNKEY(CNO)REFERENCESCourse(CNO));3、对表结构进行修改(1)为零件表P增加一个规格列,数据类型为字符,长度50;AlterTablePAddGUIGEchar(50);(2)修改课程表Course的CNAME属性列的类型为VARCHAR(30);AlterTableCourseCOLUMNCNAMEVARCHAR(30);(3)为供应情况表SPJ添加参照完整性约束;SPJ的SNO列参照S表SNO列AlterTableSPJAddForeignKey(SNO)ReferencesS(SNO);SPJ的PNO列参照P表PNO列AlterTableSPJAddForeignKey(PNO)ReferencesP(PNO);SPJ的JNO列参照J表JNO列AlterTableSPJAddForeignKey(JNO)ReferencesJ(JNO);(4)删除零件表P的规格列;AlterTablePDropColumnGUIGE;4、索引创建(1)在学生表Student的学号sno上建立聚簇索引;createclusteredindexstuSnoonStudent(Sno)(2)在学生表Student中,为姓名sname建立非聚簇索引;createindexstuSnameonStudent(Sname)(3)在课程表的课程号Cno上建立唯一索引;createuniqueindexCoCnoonCourse(Cno)(4)在选课表的学号sno、成绩Grade上建立复合索引,要求学号为升序,学号相同时成绩为降序;createindexSCsgonSC(SnoASC,gradeDESC)(5)用drop删除学生表Student的索引dropindexstudent.stuSnodropindexstudent.stuSname实验总结数据库的创建:createdatabase数据库名创建表:createtable表名(属性名数据类型[完整性约束条件])修改表的属性列的类型:AlterTable表名COLUMN属性名数据类型;为表添加参照完整性约束:AlterTable表名AddForeignKey(属性名)References表名(属性名);删除表的列:altertable表名dropcolumn属性名在表的属性列上建立聚簇索引:createclusteredindex索引名on表名(属性名)在表的属性列上建立建立非聚簇索引:createindex索引名on表名(属性名)在表的属性列上建立唯一索引:createuniqueindex索引名on表名(属性名)在表的属性列上建立复合索引:createindex索引名onon表名(属性名desc/asc)删除表的索引:dropindex表名.索引名