数据库第一个实验

news2024/9/26 3:28:17

啦啦啦啦啦,数据库终于要实验了,很担心做不好,要是挂了怎么办
只是自己的作业,可能会有问题,欢迎前来指正


一、题目(100分)

一、创建后面给出的这6个表(20分)
二、用不同的方法创建约束;(5分)
三、查看和删除约束;(5分)
四、创建、删除默认和规则 (5分)
五、掌握主键约束的特点和用法;(5分)
六、掌握惟一性约束的用法;(5分)
七、掌握默认约束和默认对象的用法;(5分)
八、掌握CHECK约束和规则对象的用法;(5分)
九、掌握利用主键与外键约束实现参照完整性的方法(5分)
十、增加一个字段;(5分)
十一、删除一个字段;(5分)
十二、增加一个约束; (5分)
十三、修改字段的数据类型(5分)
十四、创建索引;(5分)
十五、重建索引(5分)
十六、创建视图;(5分)
十七、删除视图(5分)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

二、一些基础知识

2.1 数据库中的五种约束及其添加方法

五大约束

1.主键约束(Primay Key Coustraint) 唯一性,非空性
2唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个
3.检查约束 (Check Counstraint) 对该列数据的范围、格式的限制(如:年龄、性别等)
4.默认约束 (Default Counstraint) 该数据的默认值
5.外键约束 (Foreign Key Counstraint) 需要建立两表间的关系并引用主表的列

五大约束的语法示例

1.添加主键约束(将stuNo作为主键)
alter table stuInfo 
add constraint PK_stuNo primary key (stuNo) 
2.添加唯一约束(身份证号唯一,因为每个人的都不一样) 
alter table stuInfo 
add constraint UQ_stuID unique(stuID) 
3.添加默认约束(如果地址不填 默认为“地址不详”) 
alter table stuInfo 
add constraint DF_stuAddress default (‘地址不详’) for stuAddress 
4.添加检查约束 (对年龄加以限定 15-40岁之间) 
alter table stuInfo 
add constraint CK_stuAge check (stuAge between 15 and 40)  
alter table stuInfo 
add constraint CK_stuSex check (stuSex=’男’ or stuSex=’女′)  
5.添加外键约束 (主表stuInfo和从表stuMarks建立关系,关联字段stuNo)  
alter table stuInfo 
add constraint FK_stuNo foreign key(stuNo)references stuinfo(stuNo)  

2.2 查看和删除约束

--查看约束

1. 查看user表的约束信息

select * from user_constraints WHERE TABLE_NAME='USERS';
2. 查看约束列上的信息

select * from WHERE user_cons_columns TABLE_NAME='USERS';


--删除约束
ALTER TABLE 表名 DROP CONSTRAINT 约束名

2.3 新增一个字段

alter  TABLE  t_Execution(表名)  
add  FIsModifyQuote(列名)  int(1)(字段的属性和长度)  not  NULL(设置非空)  DEFAULT  0(默认值设置为0)

2.4 删除一个字段

alter table [表名] drop 字段名

2.5 修改字段的数据类型

alter table <表名> alter column <列名> type <type>;

有时候会用到强制转换

alter table <table name> alter column <column name> type <type> using <column name> :: <type>;

2.6 创建索引

索引的分类

唯一索引(UNIQUE):每一行的索引值都是唯一的(创建了唯一约束,系统将自动创建唯一索引)
主键索引:当创建表时指定的主键列,会自动创建主键索引,并且拥有唯一的特性。
聚集索引(CLUSTERED):聚集索引就相当于使用字典的拼音查找,因为聚集索引存储记录是物理上连续存在的,即拼音 a 过了后面肯定是 b 一样。
非聚集索引(NONCLUSTERED):非聚集索引就相当于使用字典的部首查找,非聚集索引是逻辑上的连续,物理存储并不连续。
PS:聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。

UNIQUE:为表或视图创建唯一索引。 唯一索引不允许两行具有相同的索引键值。 视图的聚集索引必须唯一。如果要建唯一索引的列有重复值,必须先删除重复值。
CLUSTERED:表示指定创建的索引为聚集索引。创建索引时,键值的逻辑顺序决定表中对应行的物理顺序。 聚集索引的底层(或称叶级别)包含该表的实际数据行。
NONCLUSTERED:表示指定创建的索引为非聚集索引。创建一个指定表的逻辑排序的索引。 对于非聚集索引,数据行的物理排序独立于索引排序。

CREATE INDEX 索引名 ON 表名(列名);

联合索引

CREATE INDEX 索引名 ON 表名(列名1, 列名2, 列名3, ...);

2.7 删除索引

DROP INDEX 索引名;

查看某表的所有索引

SELECT * FROM ALL_INDEXES WHERE TABLE_NAME = '表名'

2.8 重建索引

DBCC DBREINDEX('Table'')

2.9 创建视图

CREATE VIEW 视图名称
 AS
    SELECT column_name(s) FROM table_name 
WHERE condition

2.10 查看视图

select * from 视图名

2.11 删除视图

drop view 视图名

三、我的垃圾代码(仅供参考)

--参照完整性:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应,
--则对于R中每个元组在F上的值必须:或者取空值(F的每个属性组均为空值),或者等于S中某个元组的主码值。

--提示:定义约束格式为
--constraint  约束名称  约束类型  (列)
--如constraint  pk_id  primary  key  clustered  (id))


--ALTER TABLE 表名 DROP PRIMARY KEY; -- 这种方式才对,不用加主键名字是因为一张表中只有一个主键
--ALTER TABLE stu DROP INDEX phone_number; -- 删除唯一约束的真正语法
--later table 表名 add constraint 外键名 foreign key (外键字段列) referenes 主表名称(主表列名称);
---- 删除外键约束    ALTER TABLE employee DROP FOREIGN KEY emp_dep_fk;


--SQLServer 中有五种约束,* Primary Key 约束、 *Foreign Key 约束、* Unique 约束、 Default 约束和* Check 约束,






--为了可以现场演示,这里写一个可以删掉刚创建的【读者信息表】,然后就可以重复演示了
drop table 读者信息表



--创建第一个表:读者信息表

create table 读者信息表
(
	借书证号	int			not null unique,		--主码,不能为空
	姓名		char(10)	not null,				--名字给到10个字符,不能为空
	性别		char(2)		not null,				--性别给到2个字符,表中没有空
	出生日期	date		not null,				--这是数据库特有的变量,不能为空
	借书量		smallint,							--看起来都很小,虽然应该不能为空,但表中有空
	工作单位	char(30)	not null,				--工作单位可能比较长
	电话		char(10)	not null,				
	E_mail		char(20)	not null				--给多一点,不能直接写E-mail,只好写E_mail了

	 --指定借书证号为主键值,并且创建一个聚簇索引
	constraint reader_rno primary key clustered (借书证号) , 
	 --输入性别字段值时,只能接受“男”或者“女”
	constraint chkoo_rsex check(性别 in ('男','女')), 
	--为rphone字段创建检查约束,限制只能输入类似85860126之类的数据,而不能随意输入其他数据
	constraint check_phone check
	(电话 like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')  , 

)



insert into 读者信息表 values ('29307142','张晓露','女','1989-02-1','2','管理信息系','85860126','zxl@163.com');
insert into 读者信息表 values ('36405216','李阳','男','1988-12-26', '1','航海系','85860729','ly@sina.com.cn');
insert into 读者信息表 values ('28308208','王新全','男','1988-04-25','1','人文艺术系','85860618','wxq@yahoo.cn');
insert into 读者信息表 values ('16406236','张继刚','男','1989-08-18','1','轮机工程系','85860913','zjg@163.com');
insert into 读者信息表(借书证号,姓名,性别,出生日期,工作单位,电话,E_mail) values ('16406247','顾一帆','男','1981-12-30', '轮机工程系','85860916','gyf@yahoo.cn');

--检查一下表的内容
select * from 读者信息表

--但是奇怪的是,插入后,没有按照我插入的顺序,而是按照了借书证号的首字符排序










--为了可以现场演示,这里写一个可以删掉刚创建的【借还明细表】,然后就可以重复演示了
drop table 借还明细表



--创建第二个表:借还明细表
create table 借还明细表
(
	借书证号	int			not null,
	图书编号	char(10)	not null,	--可以看到有0开头的数据,所以用char
	借还		char(2)		not null,	--借或者还
	借书日期	date		not null,	--同理
	还书日期	date,					--可以为空
	数量		smallint	not null,	--很小的数字
	工号		char(10)	not null	--带着0开头的数据
	foreign key(借书证号) references 读者信息表(借书证号),   --外码
	constraint chk_bor check(借还 in ('借','还')), 
)



--插入数据
insert into 借还明细表 values ('29307142','07108667','还','2008-03-28','2008-04-14','1','002016');
insert into 借还明细表 (借书证号,图书编号,借还,借书日期,数量,工号) values ('29307142','99011818','借','2008-04-27','1','002016');
insert into 借还明细表 (借书证号,图书编号,借还,借书日期,数量,工号) values ('36405216','07410802','借','2008-04-27','1','002018');
insert into 借还明细表 (借书证号,图书编号,借还,借书日期,数量,工号) values ('29307142','07410298','借','2008-04-28','1','002018');
insert into 借还明细表 values ('36405216','00000746','还','2008-04-29','2008-05-09','1','002016');
insert into 借还明细表 (借书证号,图书编号,借还,借书日期,数量,工号) values ('28308208','07410139','借','2008-05-10','1','002019');
insert into 借还明细表 (借书证号,图书编号,借还,借书日期,数量,工号) values ('16406236','07410139','借','2008-05-11','1','002017');



--确认数据
select *from 借还明细表



--更怪了,这次的顺序是对的,没有按照借书证号排序












--为了可以现场演示,这里写一个可以删掉刚创建的【图书类别】,然后就可以重复演示了
drop table 图书类别


--创建第三个表:图书类别
create table 图书类别
(
	类别号		char(10)	not null,	--不确定有多少,就先给10吧
	图书类别	char(20)	not null	--名字可能会很长
)

--插入数据
insert into 图书类别 values('H31','英语');
insert into 图书类别 values('I267','当代作品');
insert into 图书类别 values('TP312','程序语言');
insert into 图书类别 values('TP393','计算机网络');
insert into 图书类别 values('U66','船舶工程');



--确认数据
select * from 图书类别

--这次的数据也对了,难道是因为主码的原因吗












--为了可以现场演示,这里写一个可以删掉刚创建的【图书借阅明细表】,然后就可以重复演示了
drop table 图书借阅明细表


--创建第四个表
create table 图书借阅明细表
(
	图书编号	char(10)	not null,	--可以看到有0开头的数据,所以用char
	图书名称	char(30)	not null,	--可能很长的名字
	借书证号	char(20)	not null,
	借出日期	date		not null,		--不能为空
	归还日期	date,		--可能为空
	库存数		int			--不知道有多少
)


--插入数据

insert into 图书借阅明细表 (图书编号,图书名称,借书证号,借出日期,库存数) values('99011818','文化苦旅','29307142','2008-04-27','14');
insert into 图书借阅明细表 (图书编号,图书名称,借书证号,借出日期,库存数) values('07410802','航海英语','36405216','2008-04-27','24');
insert into 图书借阅明细表 (图书编号,图书名称,借书证号,借出日期,库存数) values('07410298','C++程序设计语言','29307142','2008-04-28','14');
insert into 图书借阅明细表 (图书编号,图书名称,借书证号,借出日期,库存数) values('07410139','艺海潮音','28308208','2008-05-10','18');
insert into 图书借阅明细表 (图书编号,图书名称,借书证号,借出日期,库存数) values('07410139','艺海潮音','16406236','2008-05-11','17');


--查看数据
select * from 图书借阅明细表


--这次也对的,我迷茫了







--为了可以现场演示,这里写一个可以删掉刚创建的【工作人员】,然后就可以重复演示了
drop table 工作人员


--创建第五个表:工作人员

create table 工作人员
(
	工号		char(10)	not null,	--带着0开头的数据
	姓名		char(10)	not null,	--给10个字符
	性别		char(2)		not null,	--性别为两个字符
	出生日期	date		not null,	--不能为0
	联系电话	char(10)	not null,	--感觉用int也可以
	E_mail		char(20)	not null,	--给多一点,不能直接写E-mail,只好写E_mail了
  	--为rphone字段创建检查约束,限制只能输入类似85860126之类的数据,而不能随意输入其他数据
	constraint choo_wphone check
	(联系电话 like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') 

)


--插入数据
insert into 工作人员 values('002016','周学飞','男','1971-05-03','85860715','zxf@163.com');
insert into 工作人员 values('002017','李晓静','女','1979-09-15','85860716','lj@163.com');
insert into 工作人员 values('002018','顾彬','男','1972-04-25','85860717','gb@yahoo.cn');
insert into 工作人员 values('002019','陈欣','女','1968-11-03','85860718','cx@sina.com.cn');


--查看数据
select * from 工作人员

--现在顺序是对的










--为了可以现场演示,这里写一个可以删掉刚创建的【图书明细表】,然后就可以重复演示了
drop table 图书明细表

--创建第六个表:图书明细表

create table 图书明细表
(
	类别号		char(10)	not null,
	图书编号	char(10)	not null,
	图书名称	char(30)	not null,
	作者		char(10),
	出版社		char(30),
	定价		char(10),
	购进日期	date,
	购入数		int,
	复本数		int,
	库存数		int
)


--插入数据
insert into 图书明细表 values('I267','99011818','文化苦旅','余秋雨','知识出版社','16','2000-03-19',8,15,14);
insert into 图书明细表 values('TP312','00000476','Delphi高级开发指南','坎图','电子工业出版社','80','2000-03-19',15,15,15);
insert into 图书明细表 values('U66','01058589','船舶制造基础','杨敏','国防工业出版社','19','2001-07-15',20,20,20);
insert into 图书明细表 values('I267','07410139','艺海潮音','李叔','江苏文艺出版社','19','2007-04-12',15,20,18);
insert into 图书明细表 values('TP312','07410298','C++程序设计','成颖','东南大学出版社','38','2007-05-08',10,15,14);
insert into 图书明细表 values('H31','07410802','航海英语','陈宏权','武汉工业大学出版社','42','2007-10-20',25,25,24);
insert into 图书明细表 values('H31','07108667','大学英语学习辅导','姜丽蓉','北京理工大学出版社','23.5','2008-02-06',25,25,25);
insert into 图书明细表 values('TP393','07410810','网络工程实用教程','汪新民','北京大学出版社','34.8','2008-08-21',10,15,15);


--查看数据
select * from 图书明细表




--增加一个字段
alter table 读者信息表 add rage smallint;   --增加“年龄”列,smallint
--删除一个字段
alter table 读者信息表 drop column rage ;   --删除“年龄”列
--删除约束
alter table 读者信息表 drop CONSTRAINT reader_rno;  --删除rno的unique约束
--alter table reader drop CONSTRAINT rname
--修改字段的数据类型
alter table 读者信息表 ALTER COLUMN 借书量 int;      --将借书量修改为int

--创建索引
create unique index Rearno on 读者信息表(借书证号);  --创建唯一索引
create clustered index Boobname on 图书明细表(图书名称);  --创建聚簇索引

drop index Rearon;  --删除索引
drop index Boobname;  --删除索引


--创建视图
go
create view readerview
as
select 姓名,出生日期 from 读者信息表;
go

--查看当前视图
select * from readerview

--删除视图
drop view readerview;   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/430350.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu20.04 个人配置和i3美化

Ubuntu20.04 个人配置和i3美化 本文是基于个人习惯和审美&#xff0c;快速配置一个新ubuntu的步骤。脚本在资源里给出&#xff0c;但仍有部分配置文件需在脚本执行后手动修改,文中已用红色字体标出 更新apt源 备份原来的源更换阿里源 # 备份 sudo mv /etc/apt/sources.list…

Camunda流程引擎查询接口API介绍

Camunda流程引擎底层采用了mybatis作为ORM框架&#xff0c;并封装了一套自己的数据查询接口&#xff0c;以下是几种可以Camunda流程引擎中查询数据的方式。 Java 查询API 。使用 Fluent Java API 来查询流程引擎实体&#xff0c;比如流程实例、任务等。REST 查询API 。通过 RE…

SpringMVC启动流程方式分析-三种方式

SpringMVC的启动方式 本文所叙述的是springmvc放入Tomcat servlet容器的启动方式 第一种Web.xml文件配置 使用传统的web.xml配置文件&#xff0c; 指定DispatchServlet &#xff0c;当然如果想要父子容器的效果指定一个ContextLoaderListener 上下文加载监听器就行&#xff…

少儿编程 电子学会图形化编程等级考试Scratch三级真题解析(选择题)2022年12月

2022年12月Scratch等级考试一级真题解析 选择题(共25题,每题2分,共50分) 1、默认小猫角色和气球角色都是显示状态,小猫程序如下图所示,气球没有程序,点击绿旗,舞台上最终显示的效果是 A、可能出现6个不同位置的小猫和6个小球 B、可能出现6个不同位置的小猫和1个气球…

【嵌入式Linux】Jetson nano GPIO应用 | 驱动开发 | 官方gpiolib、设备树与chip_driver

GPIO子系统 0.暴露给应用层 应用 $ echo 79 > /sys/class/gpio/export //导出79号gpio 引脚&#xff0c;使得可在应用层访问 $ echo out > /sys/class/gpio/gpio79/direction //设置 为输出 $ echo 1 > /sys/class/gpio/gpio79/value //输出高电平 开灯 $ echo 0…

win10系统部署-zabbix客户端

一、下载win10系统 zabbix客户端 下载地址&#xff1a; 根据自己需求下载 https://www.zabbix.com/cn/download二、win系统安装客户端 1、解压安装包 c:\zabbix 2、编辑zabbix\conf\zabbix_agentd.conf文件 Server127.0.0.1,IP IP是你的zabbix服务器端地址 ServerActive127…

C++的GUI库

1. Qt Qt是一个跨平台的C应用程序开发框架。广泛用于开发GUI程序&#xff0c;这种情况下又被称为部件工具箱。也可用于开发非GUI程序&#xff0c;例如控制台工具和服务器。 2. MFC 微软基础类库&#xff08;英语&#xff1a;Microsoft Foundation Classes&#xff0c;简称MFC&a…

罗丹明-聚乙二醇-生物素RB-PEG-Biotin;Biotin-PEG-Rhodamine,PEG2000

RB-PEG-Biotin 罗丹明-聚乙二醇-生物素 中文名称&#xff1a;罗丹明-聚乙二醇-生物素 英文名称&#xff1a;RB-PEG-Biotin 分子量&#xff08;PEG &#xff09;&#xff1a;2000、3400、5000&#xff0c;其他分子量可以定制。 用 途&#xff1a;仅供科研实验使用。 性状&…

TiDB 6.1/6.5 在 Rocky Linux 8 中的部署升级与 PITR 初体验

作者&#xff1a; 沈阳盛京征信有限公司 原文来源&#xff1a; https://tidb.net/blog/5fa1612a 本文档的主要内容为&#xff1a; TiDB v6.1.0 在 Rocky Linux 8.7 中的离线部署 TiDB v6.1.0 -> TiDB v6.5.1 升级 TiFlash 扩缩容 Haproxy 部署 br 物理备份与恢复 基…

递归算法(JS实现代码)

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;数据结构与算法 &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; 文章目录递归算法递归的思想递归三要素递归的编程模型递归一般应用场景递归经典案例…

​力扣解法汇总1026. 节点与其祖先之间的最大差值

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 给定二叉树的根节点 root&#xff0c;找出存在于 不同 节点 A 和 B 之间的最大值…

05、SpringBoot开发实用篇

一、热部署什么是热部署&#xff1f;简单说就是你程序改了&#xff0c;现在要重新启动服务器&#xff0c;嫌麻烦&#xff1f;不用重启&#xff0c;服务器会自己悄悄的把更新后的程序给重新加载一遍&#xff0c;这就是热部署。热部署的功能是如何实现的呢&#xff1f;这就要分两…

【技术】封装自己的 Maven Archetype Maven 原型

封装自己的 Maven Archetype Maven 原型 为什么要封装 Maven Archetype&#xff1f;如何封装 Maven Archetype&#xff1f;核心步骤具体步骤构建项目构建原型 archetypeIDEA 导入自定义原型 如何删除自定义的 Maven Archetype ? 为什么要封装 Maven Archetype&#xff1f; 用…

尚融宝19-Nuxt.js入门

目录 一、搜索引擎优化 1、什么是SEO 2、搜索引擎工作流程 二、服务端渲染和客户端渲染 1、什么是服务端渲染 2、什么是客户端渲染 3、两种方式各有什么优缺点&#xff1f; 三、Nuxt.js 1、Nuxt.js介绍 2、Nuxt.js服务器端渲染 四、安装和运行 五、页面、导航和路…

倒计时 1 天!IoTDB X EMQ 智能汽车主题 Meetup 明日不见不散!

期待已久的智能汽车主题 Meetup 活动明日即将举办&#xff01;天谋科技联手 EMQ、通过数据基础设施平台的实践经验分享&#xff0c;共同为行业用户带来可靠高效的智能制造、智慧车联数据解决方案&#xff0c;快来预约直播&#xff0c;不要错过这场干货满满的智能汽车主题 Meetu…

类中自定义函数并调用and使用钩子函数打印类中变量

在一个类中自定义一个函数A&#xff0c;并在前向传播函数forword中调用这个函数 假设您正在编写一个PyTorch模型&#xff0c;您可以按照以下方式在类中定义函数A&#xff0c;并在forward函数中调用它&#xff1a; import torch import torch.nn as nnclass MyModel(nn.Module)…

Android修行手册 - Android Studio提升性能效率

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断…

【Linux】NanoPi-NEO2外接spi-lcd

这是目录一、显示接口1.1、LCD接口1.2、核心板接口二、添加驱动2.1、确认驱动型号2.2、添加驱动三、测试四、附加4.1、交叉编译器安装4.2、内核和module编译4.3、扩展rootfs大小本文使用环境&#xff1a; 电脑&#xff1a;Ubuntu 18.04.5 LTS 开发板&#xff1a;NanoPi-NEO2 50…

这款知名开车软件,居然暗藏大量病毒

想必大家见多了网上有关 Windows 系统宝藏神级软件的种种推荐。 其中有这么一款软件一直占据推荐榜单前列&#xff0c;并且坐拥无数好评。 它就是在 Steam 上售价仅 19 元&#xff0c;表面看起来平平无奇的 Wallpaper Engine &#xff08;壁纸引擎&#xff09;。 别看它价格不…

常见分布式锁4:zookeeper 瞬时znode节点 + watcher监听机制,ChatGPT回复的解决死锁的方案

原文地址在这里 临时节点具备数据自动删除的功能。当client与ZooKeeper连接和session断掉时&#xff0c;相应的临时节点就会被删除。zk有瞬时和持久节点&#xff0c;瞬时节点不可以有子节点。会话结束之后瞬时节点就会消失&#xff0c;基于zk的瞬时有序节点实现分布式锁&#x…