首页 > 数据库 >xtu数据库原理实验课(2)

xtu数据库原理实验课(2)

时间:2024-03-18 17:02:12浏览次数:22  
标签:xtu 数据库 外键 约束 SYS 插入 INSTRUCTOR 主键 实验课

导入脚本

首先直接打开TOAD,按照之前的配置,现在进入只需要输入账号密码即可连接(注意校园网)

在头歌中下载建库脚本和一个数据脚本(我这里下的大数据脚本,,没耐心的话不建议,导入太耗时间了)

那个.7z文件实际上就是由建表脚本和大数据脚本构成的,所以直接在这三个里下载即可

第一个是建表脚本(必下)第二个是大数据脚本,第三个是小数据脚本(二选一)

点击这里打开导入我们的sql脚本

首先导入建表脚本,如下图所示操作

然后导入数据脚本,我的大数据脚本导了半个小时。。。


检验约束

首先进入我们数据库表的浏览页面,editor是我们编写sql语句的地方,schema browser就是浏览页

主键约束

这项任务首先是找出这个表的主键,在数据库表浏览页中找到instructor然后找到primary约束

a.主键约束存在时插入违反约束的数据

已知主键为ID,那么只需要在表中找到一个ID,插入时保证ID与其相同即可达到破坏主键的效果(如果插入,则不再具有唯一性)

这里我选取这一行数据对应的 ID作为破坏的样本

在脚本中执行下列sql语句

insert into INSTRUCTOR VALUES(4233,'LiHua','Marketing',90000);

预期结果:根据数据库的限制,约束会正常生效阻止插入语句的执行

b.使主键无效,再次插入上一步的数据

为了谨慎一点,可以查看建表脚本查看详细信息

执行主键约束失效语句,首先查出对应约束的名字CONSTRAINT_NAME

select * from user_constraints where table_name='INSTRUCTOR';

然后根据这个name执行约束失效语句发现执行失败

原因:存在其他子约束于这个键,如果要使这个键的约束失效,必须让其他绑定这个键的约束先失效

找到关联这个键的其他约束

于是有了下面三行SQL,按顺序执行则不再报错(不确定大家的NAME是否相同,可以自行查找)

alter table ADVISOR disable constraint SYS_C0087270;
alter table TEACHES disable constraint SYS_C0087261;

alter table INSTRUCTOR disable constraint SYS_C0087252;

此时主键已经失效,可以执行a任务中的那一条插入语句

---->不再报错,证明主键约束确实效果如书上所说,成功插入数据

c.尝试恢复主键约束

只需要将上述语句的disable改为enable再执行即可

d.删除插入的数据,恢复主键约束

delete from INSTRUCTOR where ID=4233 and NAME='LiHua';

此时再恢复主键约束则不会再报错,为了表结构的正常,将另外两个子约束也恢复

alter table INSTRUCTOR enable constraint SYS_C0087252;

alter table ADVISOR enable constraint SYS_C0087270;
alter table TEACHES enable constraint SYS_C0087261;


外键约束

a.插入违反dept_name上外键约束的数据

根据我们对外键的理解,外键是我们插入的数据一定为另一张表的某个元组中出现过的数据

也就是说要在instructor中插入一个dept_name,而这个值不存在于department表中

(根据字面意思也很容易想到它的外键绑定在哪个表上)

然后我们进到department表中查看他的外键约束,验证我们的猜想正确~

这里准备数据也不用仔细思考,随便写个离谱的就行,因为导入的脚本都是正常数据

困,就多睡!我果断填上一个sleep(doge)

insert into INSTRUCTOR VALUES(42345,'LiHua','sleep',90000);

b.先在department中加一个院系,再在instructor中加一个对应院系的老师

insert into DEPARTMENT VALUES('Cybersecurity','Yifu',1);
insert into INSTRUCTOR VALUES(42345,'LiHua','Cybersecurity',90000);

c.删除刚刚添加到department中的数据

delete from DEPARTMENT where dept_name='Cybersecurity';

此时回到instructor表中发现对应的dept_name列值不见了

这里的原因就是因为对应外键的值已经不存在,建表时规定一旦删除则置空,所以显示上就没有数据了

d.先删掉外键约束,再新建外键约束,删除规则为no action

alter table INSTRUCTOR drop constraint SYS_C0087253;

no action就是字面意思,在delete时不做任何操作

ALTER TABLE INSTRUCTOR  
add CONSTRAINT SYS_C0087253 
FOREIGN KEY (dept_name) REFERENCES DEPARTMENT(dept_name) ;

f.删除院系

这里的意思应该是让我们再来一次b操作,然后再来一次c操作

找到我们的sql语句按顺序再执行一遍即可

我执行的sql顺序如下,我也不知道是不是正确的,因为查no action相关资料确实是不做任何操作,那么删除时会提示绑定了外键而无法删除(?)  不过确实冲突的是这个约束

delete from INSTRUCTOR where ID=42345 and NAME='LiHua';
# 因为之前还存留了这个id的元组,id为主键,得删掉才能插入

insert into DEPARTMENT VALUES('Cybersecurity','Yifu',1);
insert into INSTRUCTOR VALUES(42345,'LiHua','Cybersecurity',90000);

恢复

实验过程尽量保证操作前后数据库表的状态与开始的时候一致,因为我们对约束的命名与之前一致,所以删除约束的语句可以再次利用

alter table INSTRUCTOR drop constraint SYS_C0087253;


ALTER TABLE INSTRUCTOR  
add CONSTRAINT SYS_C0087253 
FOREIGN KEY (dept_name) REFERENCES DEPARTMENT(dept_name) 
on delete set null;

 unique约束

a.takes表中建立unique约束,使得每人每学期每课程只能修一个课程段

sec_id 表示课程段,semester表示学期,而ID可以唯一确定一名学生

所以我们添加unique约束需要对这三个属性进行添加

使得这三个属性在表中,不存在任一其他元组能与自身同时对应相同

ALTER TABLE TAKES
ADD CONSTRAINT SYS_C0087889 # 这里的名字自取
UNIQUE (ID,semester,sec_id,YEAR);


ALTER TABLE TAKES
ADD CONSTRAINT SYS_C0087889
UNIQUE (ID,semester,sec_id,YEAR) deferrable enable novalidate;

因为好像我导入的大数据脚本中已经有重复的数据导致第一个sql无法正常执行

http://t.csdnimg.cn/G7FqD

通过自己写sql查找TAKES表中的数据发现确实如此,所以我添加约束时只能用第二种SQL

添加部分的意思是当前不检查唯一性,而在之后添加数据则会检查

对一个约束名字不要反复的创建删除,好像权限不够时做的不是真删除,而是假删,也就是约束名仍然存在,但是已经不起作用了,实在遇到了可以稍微再改一下约束名

b.插入违反unique条件的数据

这里我就举上面红框内的数据为例,由于course_id有外键约束,这里保证不破坏外键,在section表里找到一个sec_id为1,year为2006,semester为FALL的数据,填写相关信息插入(省事可以直接在takes插入脚本里找,因为takes可插入的一定满足外键了)

并且保证了这个课在他报的课中不存在

insert into TAKES VALUES('67340','626', '1', 'Fall', 2006, 'A+');

c.使得约束无效,再次执行插入

alter table TAKES disable constraint SYS_C0087889;

成功在约束失效时插入

d.删除unique约束

alter table TAKES drop constraint SYS_C0087889;


check约束

ALTER TABLE INSTRUCTOR
ADD CONSTRAINT SYS_C0087777
check(salary <= 500000);
INSERT into INSTRUCTOR VALUES('1086','simida','Math',555555);

自己判断实验是否正确的标准就是看报错是否冲突的使我们所检验的约束

这里的SYS_C0087777就是我刚刚添加的check约束,成功冲突证明实验成功,这个约束加在里面也无伤大雅,就不进行删除了..

标签:xtu,数据库,外键,约束,SYS,插入,INSTRUCTOR,主键,实验课
From: https://blog.csdn.net/G_yyyy/article/details/136790887

相关文章

  • openGauss数据库之Python驱动快速入门
    OpenGauss数据库之Python驱动openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核源自PostgreSQL,深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性。可是目前针对于OpenGauss数据库的Python应用程序的开发少......
  • 数据库管理与应用/*概述
     一、数据库系统的构成1.数据data是信息的具体表现形式,可以是数据、文字、图像、声音等。2.数据库database是存储一组逻辑相关的数据的集合。数据库中的数据按一定的数据模型描述、组织和储存。3.数据库管理系统databasemanagementsystem是一类系统软件,其主要功能......
  • 应用使用JNDI,数据库无法连接,导致的进程无法启动问题处理
    起因数据库迁移,导致的ip改变,并且更换了用户密码。解决方法找到服务器应用目录,例如:/home/weblogic/Oracle/Middleware/user_projects/domains/abc进入config目录config.xml配置文件,属于中间件的整体配置,删除使用JNDI的应用的标签内容jdbc目录为weblogic的数据库配置文件重......
  • MySQL补充:数据库的三大范式
    什么是范式?范式是数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式。每个范式,都是用来规定某种结构或数据要求——后一范式都是在前一范式已经满足的情况用来“加强要求”最常用的三大范式第一范式(1NF):属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中......
  • 【Python使用】嘿马头条完整开发md笔记第2篇:数据库,作用【附代码文档】
    嘿马头条项目从到完整开发笔记总结完整教程(附代码资料)主要内容讲述:课程简介,ToutiaoWeb虚拟机使用说明,Pycharm远程开发,产品与开发,数据库1产品介绍,2原型图与UI图,3技术架构,4开发。OSS对象存储,七牛云存储,CDN,缓存。缓存,缓存架构,缓存数据,缓存有效期与淘汰策略,缓存模式缓存数据的......
  • 数据库中的字符类型:char、varchar、nchar、nvarchar 全解析
    数据库中的字符类型选择对性能和存储效率有着重要的影响。char、varchar、nchar和nvarchar这四种字符类型各自有不同的特点和适用场景,同时也会影响数据库的碎片和页分裂情况。char类型char类型用于存储定长的字符串。它会为每个值分配固定数量的空间,即使实际内容没有填满这个空......
  • python @pytest.fixture示例及用法
    [email protected]示例及用法@pytest.fixture是pytest测试框架中的一个非常有用的功能,它允许你定义可以在多个测试用例之间共享的设置和清理代码。通过使用fixture,你可以减少重复的代码,并使得测试用例更加清晰和模块化。下面是一个简单的示例,展示了如何使用@pytest.fi......
  • java八股——mysql数据库
    上一篇传送门:点我JVM是java面试八股中的一个重难点,本文仅是部分问题,SQL语句、主从复制以及数据库锁等知识点还未涉及,后续会进行修改补充。数据库三大范式是什么?第一范式:每个字段都不可以再被拆分;第二范式:在第一范式的基础上,有主键,并且主键之外的其他字段完全依赖于主键,......
  • 数据库的基本学习
    1数据库1.1什么是数据库数据库(DB)概念:数据库仓库作用:存储数据,管理数据1.2数据库分类关系型数据库:(SQL)Mysql,Oracle,SqlSever,DB2,SQlite通过表和表之间,行和列之间的关系进行数据的存储:学员得信息表非关系型数据库:(NoSQL)notOnlyRedis,MongDB非关系型数据库,对象存储,通......
  • 基于SpringBoot的“乐校园二手书交易管理系统”的设计与实现(源码+数据库+文档+PPT)
    基于SpringBoot的“乐校园二手书交易管理系统”的设计与实现(源码+数据库+文档+PPT)开发语言:Java数据库:MySQL技术:SpringBoot工具:IDEA/Ecilpse、Navicat、Maven系统展示系统首页界面图用户注册界面图二手图书界面图留言反馈界面图个人中心界面图管理员......