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

表管理(约束)实验

设计性实验

1.创建学生数据库STU6065,并在其中创建表:
--1.创建学生数据库 STU6065
CREATE DATABASE STU6065--2.创建表
--学生表
CREATE TABLE Student6065(Sno CHAR(6) PRIMARY KEY CHECK (Sno LIKE '[1-9][0-9][0-9][0-9][0-9][0-9]'),--主键Sname VARCHAR(40) UNIQUE,Ssex CHAR(2) CHECK (Ssex IN ('男', '女')),Sage INT CHECK (Sage > 0),Sdept VARCHAR(20) CHECK (Sdept IN ('计算机', '软件', '网络', '信息'))
);
--课程表
CREATE TABLE Course6065(Cno CHAR(4) PRIMARY KEY CHECK (Cno LIKE '[1-9][0-9][0-9][0-9]'),Cname VARCHAR(40) NOT NULL,Cpno CHAR(4),Ccredit SMALLINT DEFAULT 2,FOREIGN KEY (Cpno) REFERENCES Course6065(Cno)
);
--学生选课表
CREATE TABLE SC6065(Sno CHAR(6),Cno CHAR(4),Pscj DECIMAL(3,1) DEFAULT 0 CHECK (Pscj BETWEEN 0 AND 100),Qkcj DECIMAL(3,1) DEFAULT 0 CHECK (Qkcj BETWEEN 0 AND 100),Zpcj AS (0.3 * Pscj + 0.7 * Qkcj),PRIMARY KEY (Sno, Cno),FOREIGN KEY (Sno) REFERENCES Student6065(Sno) ON UPDATE CASCADE ON DELETE CASCADE,FOREIGN KEY (Cno) REFERENCES Course6065(Cno) ON UPDATE NO ACTION ON DELETE NO ACTION
);EXEC sp_helpconstraint 'Course6065';
EXEC sp_helpconstraint 'SC6065';
2. 修改表
1)删除Course6065表的主键Cno,然后再添加主键Cno。
2)删除Course6065表的外键Cpno,然后再添加外键Cpno。
-- 删除主键约束
ALTER TABLE SC6065
DROP CONSTRAINT [FK__SC6065__Cno__62AFA012];
ALTER TABLE SC6065
DROP CONSTRAINT [FK__SC6065__Sno__61BB7BD9];
ALTER TABLE Course6065
DROP CONSTRAINT [FK__Course6065__Cpno__5B0E7E4A];
ALTER TABLE Course6065
DROP CONSTRAINT [PK__Course60__C1FE637319D13F8E];-- 重新添加主键约束
ALTER TABLE Course6065
ADD CONSTRAINT PK_Course6065_Cno PRIMARY KEY (Cno);
-- 重新添加 SC6065 表的外键约束
ALTER TABLE SC6065
ADD CONSTRAINT FK_SC6065_Cno FOREIGN KEY (Cno) REFERENCES Course6065(Cno);ALTER TABLE SC6065
ADD CONSTRAINT FK_SC6065_Sno FOREIGN KEY (Sno) REFERENCES Student6065(Sno) ON UPDATE CASCADE ON DELETE CASCADE;-- 重新添加 Course6065 表的外键约束
ALTER TABLE Course6065
ADD CONSTRAINT FK_Course6065_Cpno FOREIGN KEY (Cpno) REFERENCES Course6065(Cno);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
3)修改表Student6065,把Sname设为主键,同时保持sc6065的外键sno Student6065.Sno.
首先,在修改Student6065表的主键之前,需要先删除SC6065表中引用Student6065表的外键约束
ALTER TABLE SC6065
DROP CONSTRAINT [FK_SC6065_Sno];
接着,我需要删除Student6065表的现有主键约束
ALTER TABLE Student6065
DROP CONSTRAINT [PK__Student6__CA1FE464664404FB];
然后,添加Student6065表的Sname列设为主键
ALTER TABLE Student6065
ADD CONSTRAINT PK_Student6065_Sname PRIMARY KEY (Sname);
接着,添加唯一约束
ALTER TABLE Student6065
ADD CONSTRAINT UQ_Student6065_Sno UNIQUE (Sno);
最后,重新添加SC6065表的外键约束,引用Student6065表的Sno列
ALTER TABLE SC6065
ADD CONSTRAINT FK_SC6065_Sno FOREIGN KEY (Sno) REFERENCES Student6065(Sno) ON UPDATE CASCADE ON DELETE CASCADE;
以下照片内容验证了主键和唯一约束的功能
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(该题有点麻烦,要写出详细的每步过程。)

3.创建临时表
(1)局部临时表
-- 创建局部临时表
CREATE TABLE #t065 (id INT IDENTITY(1,1), -- 自增长列C NVARCHAR(100) -- 类型自定,这里使用 NVARCHAR(100) 作为示例
);
-- 尝试添加数据
INSERT INTO #t065 (C) VALUES ('11111');
(2)全局临时表(选择适当类型)
-- 创建全局临时表
CREATE TABLE ##t065 (A UNIQUEIDENTIFIER DEFAULT NEWID(), -- 主键,默认值是 NEWID()B TIMESTAMP 
);
-- 尝试添加数据
INSERT INTO ##t065 DEFAULT VALUES;(3)比较两个临时表应用范围
局部临时表 (#txxx): 只能在创建它的会话中访问,会话结束时表自动删除。
全局临时表 (##txxx): 可以在多个会话中访问,但最后一个会话结束时表自动删除。
实验小结(实验中遇到的问题及解决过程、实验中产生的错误及原因分析、实验体会和收获)

这次的作业真的是有史以来耗时最久的一次,大量的时间都花在了设计性实验修改表的部分,在修改表的第一和第二小题中,我出现了比较多的错误,像什么主键约束,外键约束,我刚开始都没能正确找到所要处理的主键和外键内容,导致经常执行后出现什么约束不存在,约束名称不正确,表中没有定义任何约束等问题,在这里我真的试错了很多次,慢慢地我学会了仔细查看对应表中的约束,还有就是表与表之间也存在着主键外键的约束,这也是比较容易出错的地方,但是还好在花费了一个多小时后我终于处理完了修改表中的第一第二小问。
但是修改表中的第三小问,我至今也没有特别清晰地弄明白,感觉还是有很多地方没有处理清楚,就像要找出Sname这一列,但是好几次我没有查看到这一列,但是当我尝试着重新添加时有显示Sname这列已经被多次定义了,所以我对此表示很奇怪,但是确实也是还没找到一个比较清晰的解决方法和错误原因。还有就是出现了我尝试删除的主键约束被另一个表的外键约束引用,导致我无法删除,因为SQL Server 不允许直接删除被外键引用的主键约束,除非先删除或禁用相关的外键约束。所以在这里我也花了很多时间,但是确实也没有很明白该怎么处理。
以上,我感觉这次实验确实相比之前有难度了,很多东西慢慢开始需要耗费大量时间才可以弄明白了,希望在以后的实验中可以学到更多吧。

相关文章:

  • 2025年五一数学建模A题【支路车流量推测】原创论文讲解(含完整python代码)
  • Python 基于 lstm,cnn 算法的网络舆情可视化系统
  • 【Hive入门】Hive性能调优:小文件问题与动态分区合并策略详解
  • C++负载均衡远程调用学习之消息队列与线程池
  • C++负载均衡远程调用学习之HOOK注册机制
  • QT中的QSS---界面美化
  • 蒙特卡罗方法(Monte Carlo Method)​​:基于随机采样的数值计算与模拟技术
  • 《Android 应用开发基础教程》——第十一章:Android 中的图片加载与缓存(Glide 使用详解)
  • 解决“‘mvn‘ 不是内部或外部命令,也不是可运行的程序”错误
  • 一条 SQL 查询语句是如何执行的(MySQL)
  • Redis怎么避免热点数据问题
  • 云原生后端架构的实践与挑战:探索现代后端开发的未来
  • JVM性能调优的基础知识 | JVM内部优化与运行时优化
  • SQL面试题——留存分析之使用bitmap 计算留存
  • d202552-sql
  • PostgreSQL常用函数
  • 个人健康中枢的多元化AI硬件革新与精准健康路径探析
  • PyTorch、Flash-Attn、Transformers与Triton技术全景解析+环境包
  • 融智学数学符号体系的系统解读(之一)
  • 本地大模型编程实战(32)用websocket显示大模型的流式输出
  • 年轻人能为“老有意思”做点什么
  • “国宝探索记”增强亲子连接,国宝成了生活想象的一部分
  • 国务院任免国家工作人员:颜清辉任人社部副部长
  • 马上评丨准入壁垒越少,市场活力越足
  • 中青旅:第一季度营业收入约20.54亿元,乌镇景区接待游客数量同比减少6.7%
  • 美国参议院投票通过戴维·珀杜出任美国驻华大使