一、前言
前段时间有小伙伴私聊我说,快期末考试了,能不能出一个MySQL数据库的教程啊。然后我花了一点时间,从建表到插入数据,从简单的增删改查,再到视图、存储过程、触发器的创建、删除等。其中还包括一些基本概念、E-R图创建及将其转换为关系模式。文章的最后还讲解了关系模式候选码、最小函数依赖集、模式分解的求解过程。文章虽长,但干货满满,希望大家能耐心读下去,最后希望大家能考出理想的成绩。
二、一些基本概念
1、时态数据库
区别于传统的关系型数据库(RDBMS),时态数据库(Temporal Database)主要用于记录那些随着时间而变化的值的历史,而这些历史值对应用领域而言又是重要的,这类应用有:金融、保险、预订系统、决策支持系统等。时态数据库理论提出了三种基本时间:用户自定义时间、有效时间和事务时间。同时把数据库分为四种类型:快照数据库、回滚数据库、历史数据库和双时态数据库。
2、分布式数据库
分布式数据库是指利用高速计算机网络将物理上分散的多个数据存储单元连接起来组成一个逻辑上统一的数据库。它通常使用较小的计算机系统,每台计算机中都可能有DBMS的一份完整拷贝副本,或者部分拷贝副本,并具有自己局部的数据库,位于不同地点的许多计算机通过网络互相连接,共同组成一个完整的、全局的逻辑上集中、物理上分布的大型数据库。分布式数据库的基本思想是将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上,以获取更大的存储容量和更高的并发访问量。
3、面向对象数据库
面向对象数据库系统是为了满足新的数据库应用需要而产生的新一代数据库系统。面向对象数据库系统是面向对象的程序设计技术与数据库技术相结合的产物。面向对象数据库系统的主要特点是具有面向对象技术的封装性和继承性,提高了软件的可重用性。它应满足两个标准:首先它是数据库系统,其次它也是面向对象系统。第一个标准即作为数据库系统应具备的能力。第二个标准就是要求面向对象数据库充分支持完整的面向对象概念和控制机制。
4、移动数据库
移动数据库(mobile database)是能够支持移动式计算环境的数据库,其数据在物理上分散而逻辑上集中。它涉及到数据库技术,分布式计算技术,移动通信技术等多个学科,与传统的数据库相比,移动数据库具有移动性,位置相关性,频繁的断接性,网络通讯的非对称性等特征。通俗地讲,移动数据库包括以下两层含义:人在移动时可以存取后台数据库的数据或其副本;人可以带着后台数据库的副本移动。
三、数据库的创建
1、工具
MySQL8.0、Navicat Premiun 15、ProcessOn
2、基本需求
1)下图为其中一个小伙伴的期末复习大纲,后面所有的表和库均以其名字缩写命名
2)建立一个图书管理系统数据库(zyz_library),要求包含的表有:
读者表(zyz_readers)
图书表(zyz_books)
管理员表(zyz_librarian)
借阅表(zyz_borrow)
3)为每张表设置适当的完整性约束(主键约束、唯一性约束、检查约束、默认约束、外键约束),以上五种约束在4张表中加起来至少涉及一次。
3、根据上述需求画出E-R图
E-R图又称实体关系图,是一种提供了实体,属性和联系的方法,用来描述现实世界的概念模型。通俗点讲就是,当我们理解了实际问题的需求之后,需要用一种方法来表示这种需求,概念模型就是用来描述这种需求。
1)E-R图基本要素:实体型,属性和联系
2)E-R图的构建有以下四个部分组成
矩形框:表示实体,在框中写入实体名,比如:读者、图书、管理员等
菱形框:表示联系,在框中写入联系名,比如:读者借阅图书,“借阅”表示两者的联系。
椭圆框:表示实体的属性,比如:读者的属性有姓名、性别、电话号码等
连线:用线段分别与有关实体相连接,并在线段上标注上联系的类型(1:1、1:n或m:n)。两个不同实体之间之间的联系可分为一对一联系记为1:1,一对多联系记为1:n,多对多联系记为m:n。比如一个管理员能同时登记多个读者,一个读者某个时间内只能被一个管理员登记,关系即为(1:n)。
3)E-R图的绘制
4、将E-R图转换成关系模式
读者(读者编号,读者姓名,性别,联系电话,专业,违规情况,累计借书)
图书(书号,书名,作者,出版社,出版日期,简介)
管理员(工号,姓名,性别,联系电话)
借阅(读者编号,书号,工号,是否续借,借书日期,还书日期)
5、建立数据表
#读者表 create table gzh_readers ( gzh_rno int(15) primary key not null , gzh_rname varchar(30) not null , gzh_rsex char(10) check(gzh_rsex='男' or gzh_rsex='女'), gzh_rphone varchar(50) not null , gzh_speciality varchar(50) not null, gzh_remarks varchar(200) not null , gzh_rnum int(40) not null ); #图书表 create table gzh_books ( gzh_bno char(20) primary key not null , gzh_bname char(40) unique key not null , gzh_author varchar(40) not null , gzh_press varchar(50) not null , gzh_time date not null , gzh_profiles varchar(400) ); #管理员表 create table gzh_librarian ( gzh_lno varchar(20) primary key not null, gzh_lname varchar(20) not null , gzh_lsex char(10) not null check(gzh_lsex='男' or gzh_lsex='女'), gzh_lphone varchar(50) not null ); #借阅表 create table gzh_borrow ( gzh_rno int(15) not null , gzh_bno char(20) not null , gzh_lno varchar(20) not null , gzh_renew char(4) not null , gzh_jtime date not null , gzh_htime date not null , foreign key(gzh_rno) references gzh_readers(gzh_rno), foreign key(gzh_bno) references gzh_books(gzh_bno), foreign key(gzh_lno) references gzh_librarian(gzh_lno) );
6、每张数据表的结构
四、视图
1、创建视图
(1)创建单表视图,名字为gzh_view
create view gzh_view as select * from gzh_readers
(2)创建多表视图,名字为gzh_view_some
CREATE VIEW gzh_view_some AS SELECT r.gzh_rno AS 读者编号, r.gzh_rname AS 读者姓名, r.gzh_rsex AS 性别, r.gzh_speciality AS 专业, b.gzh_bname AS 借阅的书籍, l.gzh_lname AS 管理员姓名, r.gzh_rnum AS 累积借书, r.gzh_remarks AS 违规情况, w.gzh_jtime AS 借书日期, w.gzh_htime AS 还书日期 FROM gzh_readers r, gzh_books b, gzh_librarian l, gzh_borrow w WHERE w.gzh_rno = r.gzh_rno AND w.gzh_bno = b.gzh_bno AND w.gzh_lno = l.gzh_lno ORDER BY r.gzh_rno ASC;
2、查看视图
(1)查看所有视图及表
show TABLES;
(2)查看视图基本信息
desc gzh_view;
(3)查看视图的创建信息
show create view gzh_view;
(4) 用视图查询读者表中不同的专业
select gzh_speciality as 专业 from gzh_view GROUP BY gzh_speciality
3、更新视图数据
(1)利用视图插入一条数据
insert into gzh_view(gzh_rno,gzh_rname,gzh_rsex,gzh_rphone,gzh_speciality,gzh_remarks,gzh_rnum) values (20,'郭反','男','855585522','网络工程','无违规行为',1);
(2)利用视图更新一条数据
update gzh_view set gzh_rname='郭小姐',gzh_rsex='女' WHERE gzh_rno=20;
4、修改视图
#修改某个视图的字段 alter view gzh_view as select gzh_rno as 读者编号,gzh_rname as 读者姓名,gzh_speciality as 专业,gzh_remarks as 违规情况,gzh_rnum as 累计借书 from gzh_readers; #查看一下视图字段 SELECT * from gzh_view;
5、删除视图
drop view gzh_view; show tables;