数据库第一个实验

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


一、题目(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;   

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读_Segment_Anything

论文信息 name_en: Segment Anything name_ch: 切分任何东西 paper_addr: http://arxiv.org/abs/2304.02643 doi: 10.48550/arXiv.2304.02643 date_read: 2023-04-07 date_publish: 2023-04-05 tags: [‘深度学习’,‘多模态’] author: Alexander Kirillov, Meta AI Research…

用in函数嵌入子查询作为条件时查出结果为空

用in函数嵌入子查询作为条件时查出结果为空 问题&#xff1a; SELECT * FROM SGGCDB_VIEW sv WHERE RES_ID IN (SELECT urrv.RES_ID FROM IBPS_ERP.USER_ROLE_RES_VIEW urrv WHERE urrv.ID_ 1069978138403930112 )结果未空值。 原因&#xff1a; 首先&#xff0c;SELECT u…

【Linux系统:进程控制】

目录 1 进程创建 1.1 fork函数 1.2 写时拷贝 1.3 fork常规用法 1.4 fork调用失败的原因 2 进程终止 2.1 进程退出场景 2.2 进程常见退出方法 3 进程等待 3.1 进程等待必要性 3.2 进程等待的方法 3.2.1 wait方法 3.2.2 waitpid方法 3.3 获取子进程status 4 进程程序替…

有趣的小知识(四)从基站到天线:深入了解如何优化网站速度的关键技术

一、全面认识基站 1.1 基站的定义 基站是一种通信设施&#xff0c;用于提供无线通信服务。它通常由一座塔、天线、收发信设备、电源和辅助设备等组成&#xff0c;可以与移动设备&#xff08;如手机、平板电脑等&#xff09;进行无线通信。基站是是无线终端(如手机)接入互联网…

寻找CSDN平行世界的另一个你

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 寻找CSDN平行世界的另一个你摘要前言列表测试目的摘要 本文作了一个测试&#xff0c;看看在 CSDN 的博文中&#xff0c;艾特&#xff08;&#xff09;某个好友&#xff0c;TA是否能够…

为一副通用纸牌设计数据结构

为一副通用纸牌设计数据结构 大家好&#xff0c;我是易安&#xff0c;今天我们来聊一道笔试题&#xff0c;这也是我曾经面试华为时做过的题&#xff0c;今天分享给大家。 题目&#xff1a; 如何设计一个通用的扑克牌数据结构&#xff1f;请解释如何继承它来实现特定的扑克游戏…

国内外人工智能AI工具网站大全(一键收藏,应有尽有)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 国内外人工智能AI工具网站大全&#xff08;一键收藏&#xff0c;应有尽有&#xff09;摘要一、AI写作工具二、AI图像工具2.1、常用AI图像工具2.2、AI图片插画生成2.3、AI图片背景移除…

分享10个前端开发者需要掌握的DOM技巧

Web开发不断发展&#xff0c;掌握最新的趋势和最佳实践对每位开发者来说都至关重要。Web开发的最重要方面之一就是使用文档对象模型&#xff08;DOM&#xff09;。在本文中&#xff0c;我们将探讨10个必须掌握的DOM技巧和技巧&#xff0c;配有代码示例&#xff0c;这将帮助您成…

Kotlin 是后端开发的未来

Kotlin 是后端开发的未来 严格类型、命名参数、多范式语言 您今天遇到的每个后端开发人员都会说他们使用 JavaScript、Python、PHP 或 Ruby 编写代码。近年来&#xff0c;您会遇到一小部分人转而使用 Kotlin 作为他们创建 Web 服务器的语言选择。由于我在学习Ktor&#xff0c;所…

项目部署---shell脚本自动部署项目

通过shell脚本自动部署项目 操作步骤&#xff1a; 在Linux中安装Git在Linux中安装maven编写shell脚本&#xff08;拉取代码、编译、打包、启动&#xff09;为用户授予执行shell脚本的权限执行shell脚本 执行过程&#xff1a;Linux服务器&#xff08;编译、打包、启动&#x…

巧用千寻位置GNSS软件|点测量状态栏与工具栏全解析

众所周知&#xff0c;点测量是提供点位坐标多种模式测量、测量模式切换、测量数据简单成图等多种方式的点位地理信息测量功能。下面我们来解析在千寻位置GNSS软件中点测量功能下的各状态栏和工具栏。图5.1-1点击【测量】->【点测量】&#xff0c;如图5.1-1 所示&#xff0c;…

面向削峰填谷的电动汽车多目标优化调度策略

说明书 MATLAB代码&#xff1a;面向削峰填谷的电动汽车多目标优化调度策略 关键词&#xff1a;电动汽车 削峰填谷 多目标 充放电优化 参考文档&#xff1a;店主自己整理的说明文档&#xff0c;公式、约束、数据齐全&#xff0c;可联系我查看 仿真平台&#xff1a;MATLAB YA…

Android 设置背景颜色透明度

前言 本章是对设计给出的颜色做透明度的处理 原因 一般情况下我们是不需要做处理的&#xff0c;那为什么又需要我们做透明度呢&#xff0c;原因就是咱们的设计小哥哥、小姐姐们没有自己做处理&#xff0c;如果处理了的话&#xff0c;我们直接使用设计标注的AHEX颜色就行&a…

Vue+echart 图根据网页自适应resize缩放

const chartBar null;data{return {chartBar :null} }//关键代码activated() {// 由于给echart添加了resize事件, 在组件激活时需要重新resize绘画一次, 否则出现空白bug// if (this.chartBar) {this.chartBar.resize();// }},chartBar echarts.init(document.getElementBy…

信息安全和网络安全

安全五要素&#xff1a; 机密 完整 并且能判断数据是否被篡改 可用 可控 可审查性 对于网络及网络交易&#xff0c;信息安全的基本需求是&#xff1a; 机密性完整性不可抵赖性 计算机系统安全保护的五个等级&#xff1a; 注释&#xff1a;其中的安全标记保护级是属于强…

【Spring】—Spring中Bean的配置、作用域

一、Bean的配置 Spring用于生产和管理Spring容器中的Bean&#xff0c;需要开发者对Spring的配置文件进行配置。在实际开发中&#xff0c;最常采用XML格式的配置方式&#xff0c;即通过XML文件来注册并管理Bean之间的依赖关系。 在Spring中&#xff0c;XML配置文件的根元素是…

深度学习在表面缺陷检测领域的应用

随着工业对原材料质量要求的提高&#xff0c;圆钢表面缺陷检测已成为工业生产的重要组成部分。 表面缺陷检测技术主要分为两类&#xff0c;即传统的无损检测方法和机器视觉检测方法&#xff0c;后者因其实时性和高精度而得到更广泛的应用。 作为现代工业生产的重要原材料&…

分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测

分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测 目录分类预测 | MATLAB实现CNN-BiLSTM-Attention多输入分类预测分类效果基本介绍模型描述程序设计参考资料分类效果 基本介绍 MATLAB实现CNN-BiLSTM-Attention多输入分类预测&#xff0c;CNN-BiLSTM结合注意力机制多输…

【教程】解决VSCode中Python第三方库无法自动补全

背景 学习ROS的时候&#xff0c;发现ROS的第三方库无法自动补齐 解决过程 查询到的一个解决方法是&#xff0c;禁用Pylance扩展 禁用之后第三方库可以自动补齐了但是原来自带库的语法高亮消失了此解决方法不是上策 解决方法 打开 .vscode 文件夹下面的 setting.json 文件 …

QN88封装国产FPGA

QN88GW1N-9管脚名GW2A-18管脚名AL3S10EG4S201VCCVCCIO_L1_1VCC_12VSSVSSIO_L2_1IO_L1_13IOL2AVCCO7IO_L3_1,MOSI,D1IO_L2_14IOL5A/JTAGSEL_N/LPLL_T_inIOL7A/LPLL1_T_inIO_L4_1IO_L1N_15IOL11A/TMSIOR25B/TMSIO_L5_1,SPICSNIO_L1P_16IOL11B/TCKIOR26A/TCKINITNGND7IOL12B/TDIIO…