当前位置: 首页 > article >正文

【ZZULI】数据库第二次实验

在这里插入图片描述

【ZZULI】数据库第二次实验

  • 创建学生信息管理系统的数据库
  • 通过T-SQL语句创建学生表、课程表、选课表
    • 创建学生表
    • 创建课程表
    • 创建选课表
  • 修改表结构。
    • 为SC表添加写的列,列名为备注
    • 修改备注列的数据长度。
    • 删除SC表的备注列。
  • 通过T-SQL语句对表的列添加约束,选两种约束,每个约束做一个例题
    • 例子1:为SC表的Grade列添加CHECK约束
    • 例子2:为Course表的Cname列添加UNIQUE约束
    • 不同约束的比较

前言:本实验使用的语句是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)
)

命令执行结果:

在这里插入图片描述

表的相关属性也可以看见:

  1. 主页点查看,打开对象资源管理器。
    在这里插入图片描述

  2. 打开数据库里面的StudentManagementSystem
    在这里插入图片描述

  3. 打开表中的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),具体取决于数据库系统不涉及唯一性,但用于限制列中的值必须满足特定条件
标识性可以作为表的唯一标识,用于唯一地确定表中的一行记录不能作为表的唯一标识,仅用于确保列中的值唯一不能作为表的唯一标识,仅用于数据验证
数量限制每个表只能有一个主键每个表可以有多个唯一约束每个表可以有多个检查约束
自动索引通常会自动创建一个唯一索引也会创建一个唯一索引不一定会自动创建索引,但可以根据需要创建
条件表达式无特定条件表达式,仅要求唯一性和非空性无特定条件表达式,仅要求唯一性可以包含复杂的条件表达式,用于限制列中的值
默认值不能设置默认值(因为主键必须唯一,且不允许为空,所以设置默认值没有意义)可以设置默认值,但需要注意唯一性可以设置默认值,但需要满足检查约束的条件
数据完整性强制数据完整性,确保每条记录都有一个唯一的标识符确保特定列或列组合中的值唯一,有助于维护数据完整性确保列中的值满足特定的业务规则或条件,维护数据的一致性和准确性
应用场景用于唯一标识表中的记录用于确保特定列或列组合中的值唯一用于限制列中的值,以满足特定的业务规则或条件
  • 本人知识、能力有限,若有错漏,烦请指正,非常非常感谢!!!
  • 转发或者引用需标明来源。

http://www.kler.cn/a/375226.html

相关文章:

  • C++ 优先算法——复写零(双指针)
  • 计组-层次化存储结构
  • 【golang/navmesh】使用recast navigation进行寻路
  • Vue 渐进式框架,渐进式是什么意思?
  • openai api 文件分析/联网/画图代码示例
  • <项目代码>YOLOv8 煤矸石识别<目标检测>
  • C# 结构型设计模式----外观模式
  • 图像的特征类别
  • 2024前端面试训练计划-高频题-JavaScript基础篇
  • ubuntu禁止自动更新设置
  • 新浪新闻探索大会|赵世奇:文心智能体解锁AI浪潮中的商业新范式
  • 《别傻等外卖了!Java 中的 CompletableFuture 比 Future 香十倍!》
  • computed拦截v-model
  • 「Mac畅玩鸿蒙与硬件10」鸿蒙开发环境配置篇10 - 项目实战:计数器应用
  • k8s集群 ceph rbd 存储动态扩容
  • Java项目实战II基于Java+Spring Boot+MySQL的植物健康系统(开发文档+数据库+源码)
  • 网络搜索引擎Shodan(5)
  • Lucene数据写入流程
  • 【qt qtcreator使用】【正点原子】嵌入式Qt5 C++开发视频
  • Python爬虫:在1688上“侦探游戏”获取店铺详情
  • 如何利用斗篷cloak技术做F牌独立站?
  • mysql 中临时表
  • 如何提高FPGA的逻辑利用率与资源效率!!!
  • 软件测试工程师面试整理 —— 编程与自动化!
  • 竞赛管理新未来:Spring Boot大学生竞赛平台
  • C++的filesystem的时间与Qt的QDateTime时间为什么相差204年?