目录
[练习1 创建表S,T,C和SC](#练习1 创建表S,T,C和SC)
[练习2 修改表结构](#练习2 修改表结构)
SQL语言使用数据定义语言(DATA DEFINITION LANGUAGE,简称DDL)实现其数据定义功能,可对数据库、数据库用户、基本表、视图、索引进行定义和撤消。
【实验目的】
掌握SQL Server数据定义语言的使用,能独立按要求进行数据库、基本表、进行定义和撤消。
掌握数据库中最重要的数据库对象表的创建,认识属性及各类约束的类型,使用CREATE和ALTER等语句进行数据库表的创建及表结构的修改。
【实验要求】(截屏提交)
练习1 创建表S,T,C和SC
1.1用界面方式创建数据表S
截图:

1.2用命令方式创建T,C和SC表,并记录创建语句,提交实验报告。
其中,学生表S包含4列,分别是
(S# char(6),Sname char(10) ,address varchar(100) ,Sex char(2) ),主键列是S#,要求Sname不能为空。
教师表T包含4列,分别是
(T# char(6) ,Tname char(20),Title char(4),Education char(4)),主键列是T#,给Title列增加一个缺省值约束,缺省值是'000'。
课程表C包含3列,分别是
(C# char(6) , Cname char(6) ,T# char(6)),主键列是C #,外键列是T#,引用T表的 T#,给Cname列增加一个唯一约束,强制该列值不能有重复值。
选课表SC包含3列,分别是
S# char(6),C# char(6) ,SCORE SMALLINT,其中S#和C#的属性组合作为表的主键, S# 也是外键列,引用S表的 S#,C# 也是外键列,引用C表的C#,增加一个check约束,限定SCORE列的值为0-100.
截图:

代码:
sql
-- 创建教师表T
CREATE TABLE T (
T# char(6) PRIMARY KEY,
Tname char(20) NOT NULL,
Title char(4) DEFAULT '000',
Education char(4)
);
-- 创建课程表C
CREATE TABLE C (
C# char(6) PRIMARY KEY,
Cname char(6) UNIQUE NOT NULL,
T# char(6),
FOREIGN KEY (T#) REFERENCES T(T#)
);
-- 创建选课表SC
CREATE TABLE SC (
S# char(6),
C# char(6),
SCORE SMALLINT CHECK (SCORE BETWEEN 0 AND 100),
PRIMARY KEY (S#, C#),
FOREIGN KEY (S#) REFERENCES S(S#),
FOREIGN KEY (C#) REFERENCES C(C#)
);
练习2 修改表结构
2.1在S表中增加一个新列age,数据类型为tinyint,可以为空。记录修改语句提交实验报告。
截图:

代码:
sql
ALTER TABLE S ADD age TINYINT;
2.2删除T表中的Education列,记录修改语句提交实验报告。
截图:

代码:
sql
ALTER TABLE T DROP COLUMN Education;
2.3 修改C表中Cname列的数据类型为varchar(6).
截图:
代码:
sql
ALTER TABLE C ALTER COLUMN Cname varchar(6);
2.4 修改SC表中C#列的类型为int,记录系统出现的提示信息,截屏提交。
截图:

代码:
sql
ALTER TABLE SC ALTER COLUMN C# TYPE int;
实验心得
本次数据库原理课程设计实验二围绕数据表的创建和管理展开,通过界面操作与命令行编程相结合的方式,我系统练习了SQL Server数据定义语言(DDL)的使用,深入掌握了数据表的创建、修改等核心操作,在实践中深化了对数据库表结构、约束条件的理解,同时也认识到自身在数据库操作中的不足,收获颇丰,也有诸多反思。
实验初期,我通过界面方式创建学生表S,直观感受了数据库管理工具的操作逻辑,从表名设置、列名与数据类型的选择,到主键约束、非空约束的配置,每一步都需要严谨细致。界面操作虽便捷直观,但也让我意识到,可视化操作的背后是对SQL语句的自动转化,只有理解了底层的SQL逻辑,才能更灵活地应对复杂的表结构设计需求。随后,我使用命令方式创建教师表T、课程表C和选课表SC,这一过程让我深刻体会到SQL语句的精准性------每一个关键字、括号、标点符号都不能出错,否则会导致语句执行失败。例如,在设置课程表C的外键约束时,我曾因遗漏外键引用的表名和列名,导致语句执行报错,经过反复检查和修改,最终成功完成创建,也让我记住了外键约束的完整语法格式。
在创建各表的过程中,约束条件的设置是重点也是难点。主键约束确保了表中数据的唯一性和非空性,是数据表的核心;非空约束、唯一约束、默认值约束和检查约束则进一步规范了数据格式,保证了数据的完整性和有效性。比如,在选课表SC中设置检查约束,限定成绩在0-100之间,有效避免了无效成绩数据的录入;给教师表T的Title列设置默认值约束,简化了数据录入流程。这些约束条件的应用,让我明白数据库设计不仅要考虑数据的存储,更要注重数据的质量和规范性,为后续的数据操作和管理奠定坚实基础。
表结构的修改操作是本次实验的另一重要内容,包括添加列、删除列、修改列的数据类型等。在给S表添加age列时,我顺利完成了ALTER TABLE语句的编写和执行;但在删除T表的Education列时,我曾担心删除列会影响表中已有的数据,后来通过查阅资料和实际操作发现,只要该列无关联约束,删除操作不会对其他数据造成影响,这让我对表结构修改的安全性有了更清晰的认识。而在修改SC表中C#列的数据类型时,系统出现了提示信息,经过分析得知,这是因为该列作为外键,与课程表C的C#列存在关联,直接修改数据类型会破坏表间的参照完整性,这一经历让我深刻理解了外键约束对表间关系的保护作用,也意识到在进行表结构修改前,必须先检查表间的关联关系,避免出现数据异常。
通过本次实验,我不仅熟练掌握了CREATE、ALTER等DDL语句的使用方法,更深刻理解了数据库表设计的核心思想------严谨性和规范性。实验过程中,我也发现了自身的不足:一是对SQL语句的记忆不够熟练,偶尔会出现语法错误;二是对表间约束关系的理解不够透彻,在处理复杂约束时容易出错;三是操作不够细心,偶尔会因疏忽遗漏关键参数。针对这些问题,我计划在后续的学习中,加强SQL语句的练习,多进行复杂表结构的设计实践,同时注重理论知识的巩固,深入理解约束条件的作用和应用场景。
本次实验让我深刻认识到,数据库操作是一项严谨细致的工作,每一个操作都可能影响到整个数据库的完整性和安全性。通过实践,我将理论知识与实际操作相结合,不仅提升了自身的动手能力,更培养了严谨的逻辑思维和问题解决能力。在今后的学习和实践中,我将继续加强数据库相关知识的学习,不断提升自身的专业技能,为后续更复杂的数据库设计和管理工作做好准备。