【ZZULI】数据库第二次实验
前言:本实验使用的语句是
T-SQL
。
创建学生信息管理系统的数据库
可以图形化形式添加,也可以通过
T-SQL
语句添加。
CREATE DATABASE StudentManagementSystem;
命令执行结果:
通过T-SQL语句创建学生表、课程表、选课表
注意这个语句的执行首先要加一条:
USE StudentManagementSystem;
这条语句选择 StudentManagementSystem
数据库作为当前操作的数据库。
也可以手动选择:
创建学生表
USE StudentManagementSystem;
CREATE TABLE Student (
Sno char ( 7 ) PRIMARY KEY,
Sname char ( 10 ) NOT NULL,
Ssex char (2),
Sage tinyint ,
Sdept char (20)
)
命令执行结果:
表的相关属性也可以看见:
-
主页点查看,打开对象资源管理器。
-
打开数据库里面的
StudentManagementSystem
。
-
打开表中的
Students
表,前面的dbo.
是软件自己加的,右键点开设计,可以看到我们表的属性:
创建课程表
USE StudentManagementSystem;
CREATE TABLE Course (
Cno char(10) NOT NULL -- 课程编号,主键
, Cname char(20) NOT NULL -- 课程名称
, Ccredit tinyint -- 学分,表示课程的学分值
, Semester tinyint -- 学期,表示课程开设的学期
, PRIMARY KEY (Cno) -- 主键约束,确保每个课程编号都是唯一的
);
命令执行结果:
课程表的相关属性:
创建选课表
USE StudentManagementSystem;
CREATE TABLE SC (
Sno char(7) NOT NULL, -- 学号,主键的一部分
Cno char(10) NOT NULL, -- 课程编号,主键的一部分,外键引用Course表的Cno
Grade tinyint, -- 成绩
XKLB char(4), -- 选课类别(这个字段的用途可能需要进一步明确)
-- 主键约束,确保学号和课程编号的组合是唯一的
PRIMARY KEY (Sno, Cno),
-- 外键约束,确保学号在Student表中存在
FOREIGN KEY (Sno) REFERENCES Student(Sno),
-- 外键约束,确保课程编号在Course表中存在
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
命令执行结果:
选课表属性:
修改表结构。
为SC表添加写的列,列名为备注
USE StudentManagementSystem;
ALTER TABLE SC
ADD 备注 varchar(255); -- 新增一个名为“备注”的列,数据类型设为varchar(255)
命令执行结果:
SC
的各个列的情况:
修改备注列的数据长度。
USE StudentManagementSystem;
ALTER TABLE SC
ALTER COLUMN 备注 varchar(500); -- 将“备注”列的数据类型修改为varchar(500)
命令执行结果:
SC
的各个列的情况:
删除SC表的备注列。
USE StudentManagementSystem;
ALTER TABLE SC
DROP COLUMN 备注; -- 从SC表中删除名为“备注”的列
命令执行结果:
成功删除:
通过T-SQL语句对表的列添加约束,选两种约束,每个约束做一个例题
例子1:为SC表的Grade列添加CHECK约束
假设
SC
表存储了学生选课及成绩信息,我们希望确保Grade
列(代表成绩)中的值在0到100之间(包含0和100)。为此,我们可以添加一个CHECK
约束。
T-SQL代码:
USE StudentManagementSystem;
-- 添加CHECK约束到Grade列
ALTER TABLE SC
ADD CONSTRAINT CK_SC_Grade CHECK (Grade BETWEEN 0 AND 100);
命令执行结果:
表各个列的情况:
- 有时候可能没有及时刷新,需要我们刷新一下。
例子2:为Course表的Cname列添加UNIQUE约束
我们可以确保每门课程的名称(
Cname
)在数据库中也是唯一的(尽管这在现实世界中可能并不总是合理的,因为可能存在名称相似或相同的课程)。
T-SQL
代码:
USE StudentManagementSystem;
ALTER TABLE Course
ADD CONSTRAINT UQ_Course_Cname UNIQUE (Cname);
命令执行结果:
不同约束的比较
以下是主键约束(PRIMARY KEY)、唯一约束(UNIQUE)和检查约束(CHECK)之间的简单比较,以表格的形式呈现:
约束类型 | 主键约束(PRIMARY KEY) | 唯一约束(UNIQUE) | 检查约束(CHECK) |
---|---|---|---|
唯一性 | 必须唯一,且不允许为空(NULL) | 必须唯一,但允许一个或多个空值(NULL),具体取决于数据库系统 | 不涉及唯一性,但用于限制列中的值必须满足特定条件 |
标识性 | 可以作为表的唯一标识,用于唯一地确定表中的一行记录 | 不能作为表的唯一标识,仅用于确保列中的值唯一 | 不能作为表的唯一标识,仅用于数据验证 |
数量限制 | 每个表只能有一个主键 | 每个表可以有多个唯一约束 | 每个表可以有多个检查约束 |
自动索引 | 通常会自动创建一个唯一索引 | 也会创建一个唯一索引 | 不一定会自动创建索引,但可以根据需要创建 |
条件表达式 | 无特定条件表达式,仅要求唯一性和非空性 | 无特定条件表达式,仅要求唯一性 | 可以包含复杂的条件表达式,用于限制列中的值 |
默认值 | 不能设置默认值(因为主键必须唯一,且不允许为空,所以设置默认值没有意义) | 可以设置默认值,但需要注意唯一性 | 可以设置默认值,但需要满足检查约束的条件 |
数据完整性 | 强制数据完整性,确保每条记录都有一个唯一的标识符 | 确保特定列或列组合中的值唯一,有助于维护数据完整性 | 确保列中的值满足特定的业务规则或条件,维护数据的一致性和准确性 |
应用场景 | 用于唯一标识表中的记录 | 用于确保特定列或列组合中的值唯一 | 用于限制列中的值,以满足特定的业务规则或条件 |
- 本人知识、能力有限,若有错漏,烦请指正,非常非常感谢!!!
- 转发或者引用需标明来源。