数据库原理及其应用(学习笔记)

该篇内容为上课写的笔记,有兴趣的可以了解一下:
第一章:
一 :
数据的处理是指对各种数据进行收集、储存、加工和传播的一系列活动的总和。
数据管理则指对数据进行分类、组织、编码、存储、检索和维护,他是数据处理的中心问题。
数据库系统和文件系统相比具有以下主要特点:
(1)数据结构化:数据结构化是数据库与文件系统的最根本区别。
(2)数据库系统的数据冗余度小,数据共享度高,易扩充。数据冗余度小是指重复的数据小。
减少冗余度数据可以带来以下优点:
a,数据量小可以节约储存空间,是数据的存储、管理和查询容易实现。
b,数据冗余度小可以使数据统一,避免产生数据的不一致问题。
c,数据冗余度小便于数据维护,避免数据统计错误。
(3)数据独立性高:数据独立性包括数据的物理独立性和数据的逻辑独立性。
物理独立性:是指用户的应用程序与储存在磁盘上的数据库中的数据是相互独立的
逻辑独立性:是指用户的应用程序与数据库的逻辑结构是相互独立的。也就是说,数据的逻辑结构改变了,用户程序也可以不变。
(4)数据是由DBMS统一管理和控制:DBMS提供一下几方面的数据控制功能。
a,数据安全保护性
b,数据的完整性检查。
c,并发控制
d,数据恢复
二:
数据模型。
信息世界是指现实世界、信息世界和计算机世界(也称数据世界)。
信息经过数字化处理形成计算机能够处理的数据,就进入了计算机世界,在计算机世界中用的以下术语:
a,数据项:数据项是对象属性的数据表示。数据项有型和值之分,型是对数据特性的表示,它通过数据项的名称、数据结构、数据宽度和值域等来描述;数据项的值是其具体数值,型和值都要符合数据的编码要求。
b,记录:记录是实例的数据表示,记录有型和值之分:记录的型是结构,有数据项的型构成;记录的值表示对象中的一个实例,他的分量是数据项值。
c,文件:文件设计对象数据的表示,是同类记录的集合。
d,数据模型:现实世界中的事物和相互联系反映到计算机世界中,是文件的记录结构和不同文件间的记录与记录之间的联系,它们数据化的结果就是数据模型。
三:
数据模型的分类:
(1),概念模型:也称信息模型,他是按用户的观点来对数据和信息建模。概念模型不依赖于某一个DBMS支持的数据模型。
他的特点为:
a,具有较强的语义表达能力,能够方便、直接的表达应用中的各种语义知识。
b,应该简单、清晰、易于用户理解,是用户与数据库设计人员之间进行交流的语言。
(2),数据模型:主要网状模型,层次模型,关系模型。
四:
A,E-R设计要点:
Entity:实体,用矩形表示。
Relation:关系,用菱形表示。关系就是实体与实体之间的动作。
实体有属性,而属性没有。一般它作为区分属性和实体的依据。
构成E-R图的3个基本要素是实体型、属性和联系,其表示方法为:
实体
一般认为,客观上可以相互区分的事物就是实体,实体可以是具体的人和物,也可以是抽象的概念与联系。关键在于一个实体能与另一个实体相区别,具有相同属性的实体具有相同的特征和性质。用实体名及其属性名集合来抽象和刻画同类实体。在E-R图中用矩形表示,矩形框内写明实体名;比如学生张三、学生李四都是实体。如果是弱实体的话,在矩形外面再套实线矩形。

属性
实体所具有的某一特性,一个实体可由若干个属性来刻画。属性不能脱离实体,属性是相对实体而言的。在E-R图中用椭圆形表示,并用无向边将其与相应的实体连接起来;比如学生的姓名、学号、性别、都是属性。如果是多值属性的话,在椭圆形外面再套实线椭圆。如果是派生属性则用虚线椭圆表示。

联系
联系也称关系,信息世界中反映实体内部或实体之间的关联。实体内部的联系通常是指组成实体的各属性之间的联系;实体之间的联系通常是指不同实体集之间的联系。在E-R图中用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1 : 1,1 : n或m : n)。比如老师给学生授课存在授课关系,学生选课存在选课关系。如果是弱实体的联系则在菱形外面再套菱形。
一般性约束
实体-联系数据模型中的联系型,存在3种一般性约束:一对一约束(联系)、一对多约束(联系)和多对多约束(联系),它们用来描述实体集之间的数量约束:
(1) 一对一联系(1 ∶1)
对于两个实体集A和B,若A中的每一个值在B中至多有一个实体值与之对应,反之亦然,则称实体集A和B具有一对一的联系。
一个学校只有一个正校长,而一个校长只在一个学校中任职,则学校与校长之间具有一对一联系。 [1]
(2) 一对多联系(1 ∶N)

对于两个实体集A和B,若A中的每一个值在B中有多个实体值与之对应,反之B中每一个实体值在A中至多有一个实体值与之对应,则称实体集A和B具有一对多的联系。
例如,某校教师与课程之间存在一对多的联系“教”,即每位教师可以教多门课程,但是每门课程只能由一位教师来教。一个专业中有若干名学生,而每个学生只在一个专业中学习,则专业与学生之间具有一对多联系
(3) 多对多联系(M ∶N)
对于两个实体集A和B,若A中每一个实体值在B中有多个实体值与之对应,反之亦然,则称实体集A与实体集B具有多对多联系
例如,表示学生与课程间的联系“选修 ”是多对多的,即一个学生可以学多门课程,而每门课程可以有多个学

生来学。联系也可能有属性。例如,学生“ 选修” 某门课程所取得的成绩,既不是学生的属性也不是课程的属性。由于“ 成绩” 既依赖于某名特定的学生又依赖于某门特定的课程,所以它是学生与课程之间的联系“ 选修”的属性。
实际上,一对一联系是一对多联系的特例,而一对多联系又是多对多联系的特例。 [2] 联系是随着数据库语义而改变的,假如有如下3种语义规定:
例如,一个部门有一个经理,而每个经理只在一个部门任职,则部门与经理的联系是一对一的。
一个员工可以同时是多个部门的经理,而一个部门只能有一个经理,则这种规定下“员工”与“部门”之间的“管理”联系就是1:n的联系了。
一个员工可以同时在多个部门工作,而一个部门有多个员工在其中工作,则“员工”与“部门”的“工作”联系为m:n联系。 [3]

弱实体
编辑
弱实体(weak entity)是一种数据库系统术语。其定义为一个实体对于另一个实体(一般为强实体,也可以是依赖于其他强实体的弱实体)具有很强的依赖联系,而且该实体主键的一部分或全部从其强实体(或者对应的弱实体依赖的强实体)中获得,则称该实体为弱实体。

作图步骤
编辑
(1)确定所有的实体集合;
(2)选择实体集应包含的属性;
(3)确定实体集之间的联系;
(4)确定实体集的关键字,用下划线在属性上表明关键字的属性组合;
(5)确定联系的类型,在用线将表示联系的菱形框联系到实体集时,在线旁注明是1或n(多)来表示联系的类型。

设计步骤
编辑

调查分析
(1)选择局部应用在需求分析阶段,通过对应用环境和要求进行详尽的调查分析,用多层数据流图和数据字典描述了整个系统。
设计分E-R图的第一步,就是要根据系统的具体情况,在多层的数据流图中选择一个适当层次的(经验很重要)数据流图,让这组图中每一部分对应一个局部应用,我们即可以以这一层次的数据流图为出发点,设计分E-R图。一般而言,中层的数据流图能较好地反映系统中各局部应用的子系统组成,因此人们往往以中层数据流图作为设计分E-R图的依据。
(2)逐一设计分E-R图每个局部应用都对应了一组数据流图,局部应用涉及的数据都已经收集在数据字典中了。现就是要将这些数据从数据字典中抽取出来,参照数据流图,<1> 标定局部应用中的实体, <2> 实体的属性、标识实体的码,<3> 确定实体之间的联系及其类型(1:1、1:n、m:n)。
下面是对<1>、<2>和<3>步骤的具体说明:
<1> 标定局部应用中的实体现实世界中一组具有某些共同特性和行为的对象就可以抽象为一个实体。对象和实体之间是"is member of "的关系。例如在学校环境中,可以把张三、李四、王五等对象抽象为学生实体。对象类型的组成成分可以抽象为实体的属性。组成成分与对象类型之间是"is part of "的关系。例如学号、姓名、专业、年级等可以抽象为学生实体的属性。其中学号为标识学生实体的码。
<2> 实体的属性、标识实体的码实际上实体与属性是相对而言的,很难有截然划分的界限。同一事物,在一种应用环境中作为"属性 ",在另一种应用环境中就必须作为"实体 "。一般说来,在给定的应用环境中:a、属性不能再具有需要描述的性质。即属性必须是不可分的数据项。b、属性不能与其他实体具有联系。联系只发生在实体之间。
<3> 确定实体之间的联系及其类型(1:1、1:n、 m:n)。根据需求分析,要考察实体之间是否存在联系,有无多余联系。

合并生成
各分E-R图之间的冲突主要有三类:属性冲突、命名冲突和结构冲突。
1.属性冲突 。
(1) 属性域冲突,即属性值的类型、取值范围或取值集合不同。例如:属性“零件号”有的定义为字符型,有的为数值型;
(2) 属性取值单位冲突。例如:属性“重量”有的以克为单位,有的以公斤为单位。
2.命名冲突 。
(1) 同名异义。不同意义对象相同名称;
(2) 异名同义(一义多名)。同意义对象不相同名称。例如:“项目”和“课题”。
3.结构冲突。
(1) 同一对象在不同应用中具有不同的抽象。例如"课程 "在某一局部应用中被当作实体,而在另一局部应用中则被当作属性;
(2) 同一实体在不同局部视图中所包含的属性不完全相同,或者属性的排列次序不完全相同;
(3) 实体之间的联系在不同局部视图中呈现不同的类型。例如实体E1与E2在局部应用A中是多对多联系,而在局部应用B中是一对多联系;又如在局部应用X中E1与E2发生联系,而在局部应用Y中E1、E2、E3三者之间有联系。解决方法是根据应用的语义对实体联系的类型进行综合或调整。

修改重构
生成基本E-R图分E-R图经过合并生成的是初步E-R图。之所以称其为初步E-R图,是因为其中可能存在冗余的数据和冗余的实体间联系,即存在可由基本数据导出的数据和可由其他联系导出的联系。冗余数据和冗余联系容易破坏数据库的完整性,给数据库维护增加困难,因此得到初步E-R图后,还应当进一步检查E-R图中是否存在冗余,如果存在,应设法予以消除。修改、重构初步E-R图以消除冗余,主要采用分析方法。除此外,还可以用规范化理论来消除冗余。
五:
(1)常用的结构数据模型:
层次模型,网状模型,关系模型
层次模型:
1,有且只有一个节点没有双亲节点,这个节点称为根节点
2,除根节点外的其他节点有且只有一个双亲节点
在层次模型中:实体集用记录表示;
层次模型的特点:层次模型像一颗倒立的树,只有一个根结点,有若干个叶结点,结点的双亲是唯一的。
基本特点:对于任何一个给定的记录值,只有按其路径查看,才能显示出它的全部意义,没有一个子女记录
值能够脱离双亲记录值而独立存在。
网状模型:
1,有一个以上的结点没有双亲。
2,结点可以有多于一个的双亲。
(2)关系模型:
关系模型的数据结构:在用户看来,一个关系模型的逻辑结构是一张二维表,它由行和列组成。
关系:对应通常说的表
元组:表中的一行即为一个元组
属性:表中的一列即为一个属性
主码:表中的某个属性组,他可以唯一确定一个元组。
域:属性的取值范围。例如性别域是(男,女)。
分量:元组中的一个属性值。
关系模型要求关系必须是规范化的,最基本的条件是,关系的而每一个分量必须是不可分的数据项,既不允许表中还有表。
六:
1,数据库的三级模式:
把数据库的内部体系结构分为三级:模式,外模式,内模式。
(1)模式:模式是对数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。数据库模式一某一种数据模型为基础。
定义模式是不仅要定义数据的逻辑结构,而且要定义与数据有关的安全性、完整性要求,定义这些数据之间的联系。
(2)外模式:外模式也称子模式或用户模式,他是对数据库用户(包括应用程序员和最终用户)看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用相关的数据的逻辑表示。
(3)内模式:内模式也称存储模式,它是对数据物理结构和存储结构的描述,是数据库内部的表示方式,一个数据库只有一个内模式。
2,三级模式结构的特点:
(1)保证数据的独立性:将模式和内模式分开,保证了数据的物理独立性;将外模式分开,保证了数据的逻辑独立性。
(2)简单用户接口:按照外模式编写应用程序或输入命令,二不需要了解数据库内部的存储结构,方便用户使用系统。
(3)有利于数据共享:在不同的外模式下可有多个用户共享系统中的数据,减少了数据的冗余。
(4)有利于数据的安全保密:在外模式下根据要求进行操作,只能对限定的数据操作,保证了其他数据的安全。
第二章:
一:关系模型的基本概念:
关系模型有数据结构,关系操作集合,完整性约束三部分组成。
二:
关系模型概述:
关系模型是数据库系统中最重要的一种模型。
1,数据结构:关系模型的数据结构非常单一。在用户看来,关系模型中数据的逻辑结构是一张二维表。在关系模型中,现实世界的实体以及实体之间的联系均用关系来表示。
2,关系操作
采用集合操作的方式,既操作的对象和结果都是集合。这种操作方式也称为一次一集合的方式,二非关系模型的数据操作方式则为一次一记录的方式。
A,关系模型中常用的操作包括两类。
查询操作:选择( Select)、投影(Project)、连接(Join)、除(Divide)、并(Union)、交(Intersection)、差(Difference)等
更新操作:增加(Insert)、删除(Delete)、修改(Update)等
B,表达(或描述)关系操作的关系数据语言是一种非过程化的语言,既用户不必求助于循环结构就可以完成数据操作,他可以分为三类:
关系数据语言:
a,关系代数语言(如ISBL)
b,关系演算语言
1,元组关系演算语言(如APLHA、QUEL);
2,域关系演算语言(如QBE)
c,具有关系代数和关系演算双重特点的语言(如SQL)
3,完整性约束
关系模型允许定义三类完整性:实体完整性、参照完整性和用户自定义完整性
其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,应该由关系系统自动支持。
三:
A,关系
(1)域:域是一组具有相同数据类型的值的集合。域一般用大写字母D表示,如D1,D2,…Dn等。其中域中数据的个数叫域的基数。
(2)笛卡尔积:给定一组域D1,D2,…Dn,这些域中可以存在相同的域。
D1,D2,…Dn的笛卡尔积为D1 X D2 X D3 X…X Dn={(d1,d2,…dn)|di属于Di,i=1,2;…n};
其中每一个元素(d1,d2,…dn)叫做一个n元组或简称元组。
元素的每一个值di(i=1,2,3,…n);叫做一个分量即列
笛卡尔积课表示为一个二维表。表中的每行对应一个元组,表中的每列对应一个域。
(3)关系:D1 X D2 X D3 X…X Dn的子集叫做在域D1,D2,…Dn上的关系,用R(D1,D2,…Dn)表示。这里R表示关系的名字,n表示关系的目或度。
1,关系中的每个元素是关系中的元组,通常用t表示。
2,当n=1时,称该关系为单元关系。,
3,关系也是一个二维表,表的每行对应一个元组,每列对应一个域。由于域可以相同,为何加以区分,必须对每列起一个名字,称为属性。
4,若关系中某一属性组的值能唯一标识一个元组,则称该属性组为候选码。
5,若一个关系有多个候选码,则选定其中一个为主码。
6,关系模式下所有的属性组是这个关系模式的候选码,称为全码。
B,关系模式:关系的描述称为关系模式。一个关系模式应该是一个五元组。他可以形式化的表示为:R(U,D,dom,F)。其中R为关系名,U为组成该关系的属性名集合,D为属性组所来自的域,dom为属性向域的映像集合,F为属性间数据的依赖关系集合。
关系模式通常可以简记为:R(A1,A2,…An)。其中R为关系名,A1,A2,…An为属性名。二域名记属性想域的映像常常直接说明为属性的类型、长度。
C,关系数据库:在给定的现实世界领域中,相应于所有实体及实体之间联系的关系的集合构成一个关系数据库。
四:关系数据库完整性规则
数据的约束条件通过3类完整性约束条件来描述,他们是实体完整性、参照完整性和用户自定义完整性。
1,实体完整性
实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值。
关系模型是关系来描述实体以及实体之间的关系,所以在关系数据库中一个关系对应现实世界中一个实体集,关系中每一个元组对应一个实体。现实世界中的每一个实体都是可以区分的,在关系中用主键唯一标识一个实体,若一个实体(元组)的主键为控制(所谓空值是“不知道”或“无意义”的值),说明存在某个不可标识的实体,这和实体的概念是矛盾的,即存在不可标识的实体,因此限定关系中的主键值不能为空。关系的这种约束,称为实体完整性。
实体完整性在表创建或者修改时用主键实现,不同关系数据库管理系统中实现和设置可能不太一样。
2,参照完整性
在介绍参照完整性前,我们先给外键的定义:外键是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,课创建两个表之间的链接。
参照完整性规则:是用于约束外键的,即若F(属性或属性集合)是关系R中对应关系S的外键,则对于R中每个元组在F上的值必须为以下值:
(1)或者取空值(F的每个属性值均为空)
(2)或者等于S中某个元组的主键值
关系 R和S 可以是相同的关系。
3,用户自定义完整性
三:关系代数
关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式,它是用对关系的运算来表达查询的。
关系代数的运算对象是关系,运算结果亦为关系
关系。关系代数用到的运算符包括四类:集合运算符、专门的关系运算符、比较运算符、逻辑运算符。

四:传统的集合运算
传统的集合运算是一个二目运算,包括并、差。交。广义笛卡尔积四种运算,所谓二目运算,就是指在两个关系中进行的一种运算,并且这两个关系必须满足相容关系
MYSQL:
表是什么,表是一种结构化文件,可以用来存储特定类型的数据,表中有几个概念:列、行、主键,列叫字段,行叫做表中的记录,每一个字段都有:字段名称、数据类型、约束、长度。
学号(主键) 姓名 性别 年龄
00001 张三 男 20
00002 李四 女 20
SQL(结构化查询语言,标准,90%通用)的分类:
数据查询语言(DQL-Data Query Language)
代表关键字:select
数据操纵语言(DML-Data Manipulation Language)
代表关键字:insert,delete,update //改变的是表中记录
数据定义语言(DDL-Data Definition Language)
代表关键字:create,rollback //改变的是表中结构
事务控制语言(TCL-Transactional Control Language)
代表关键字:commit,rollback
数据控制语言(DCL-Data Control Language)
代表关键字:grant,revoke
查看和指定现有数据库:
show database();
使用哪个数据库:use …;
查看当前库中的表:
show tables;
select databases; //查看使用表的位置
查看其它库中的表:
show tables from< databases name>;
例子:如何查看exam库中的表
在别的表中:
show tables from exam;
查看表的结构:
desc

;
查看表的创建语句:
show create table
;
简单的查询:
select 只是将表中的数据检索出来,查询出来
查询员工姓名:
select ename from

查看全部中间用逗号就行:
select ename,eid,…from student(表);
等等也可以用select * from student;
select ename,eid as esid from student(表);
将eid改名为esid,其中as关键字可以省略;
变成 select ename eid esid from student;
连起来操作就是:
show databases;
use school;
show tables;
desc name;
select … from …;
例子:
select

select … from …where …=2;
限定条件让这个结果为2的
select … from …where …<=3000 and >=5000;
或者select …from…where …between 3000 and 5000;
between 的前提是前面的数比后面的小。

select ...from...where...?=3000or?=5000
select ...from...where...?in(3000,5000)
select...from..where ...ename like 'o';
(名字里面含有O的);

模糊查询:
select …from …where…ename like ‘%o%’;(含o的)
找出第一个字母是s的
select …from …where…ename like ‘S%’;
找出最后一个是s的:
select …from …where…ename like ‘%s’;
找出第二个字母是A的:
select …from …where…ename like ‘_A%’;(下划线代表一个字符)
在当前数据库中查看其它数据库中的表:
show tables from

;
查看创建表是如何创建的:
show create table
;
查看当前在那个数据库里面:
select datatbase();
修改表名:
rename table
to ;
修改表里面的属性值:
alter table student change <表里面的名称> <修改后的名称> <字符类型>

让字母排序:

前面的薪水如果不一样,后面的那个enam asc 根本用不上。越靠前的在字段起的决定性作用越大。

2是查询字段的编号,这个方法不健壮,能看懂就行。
数据处理函数(单行处理函数):

lower(改成小写)

底层数据库没变,只是改变了显示结果。
upper(大写)

substr(截取):

第一个字符串是截取的位置,第二个是起始的位置,第三个是长度。
找出第二个字母是A的:
1,

2,

length(取长度):

trim(去空格),因为空格也算个字符串:

round(保留小数):

默认不保留小数。

第一个参数是被四舍五入的数字,第二个是四舍五入到哪一位。
rand() 生成随机数。

ifnull 空值处理函数。 将一个null装换成具体数值。 防止空值出现。

ifnull() 第一个参数是需要改变的编号,第二个是改变的值。
有空值参与的运算还是空。所以就要用的ifnull()
求年薪:

查看mysql当前版本:

15集。
分组查询:
涉及两个子句:
1,group by
2,having

job也是5个。。正好符合。

job只有5个而ename有14个。所以。。。
由图可以发现,max(sal)与ename不对称。
在mysql中,可以编写在select后面,语法在这方面比较松散,不严格,但是查询结果没有意思。
在oracle中,不可以,执行的时候报错。

where是在分组之前,having是在分组后,分组之后对数据不满意继续有having。
where不能随便用。
两者都是完成数据过滤的,一个在前一个在后。

原则:尽量在where中过滤,无法过滤的数据,通常都是需要先分组之后再过滤的,这个时候可以选择使用having。
效率问题。

连接查询:

14*4=56 个记录。,没有任何条件限制。
这种现象被称为著名的笛卡尔积成绩现象(或称笛卡尔积)。

SQL92语法,这是内连接中的等值连接。
select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;
SQL99语法,还是内连接中的等值连接
SQL99语法优点:表连接独立出来了,结构更清晰,对表连接不满意的话,可以再追加where进行过滤。

select e.ename,d.dname from emp e join dept d on e.deptno = d.deptno;

自连接指的是一张表看成两张表。

有一个不满足,king没有上级。
24集。。。

SQL99外连接中的右(外)连接。right 省略了outer

员工对应的部门编号和工资:

部门编号所对应的部门名称:

部门等级:

子查询:
什么是子查询:
select 语句嵌套select语句
子查询可以出现在那儿?
select…(select)
from…(select).
where…(select).

1,where后面使用子查询:

,2,from后面使用子查询(将查询结果当做临时表):

3,select 后面使用子查询(了解)

续:

4,union 是用来合并结果集的

两个语句的字段数量必须相同。

这种写法在oracle中不允许,oracle中要求字段数量相同且类型也相同。

可以合并两者的名字,发现,union中第二个名字的命名可以略去,因为union的表名都是以第一个来显示的。

5,limit

limit使用格式:
limit 起始下标,长度
起始下标没有指定,默认从0开始,0表示表中的第一条记录。

mysql中通用的分页语句:

模板:

表:

varchar和char的区别:
首先都是char类型,例如一个人名称 jack,如果用varchar(10),那么他自会分配4个长度,如果有char(10),他会分配10个长度只用了4个,剩余6个浪费了。但是varchar效率低,因为他需要判断,而char不需要判断。

VARCHAR(3): 表示存储的数据不能超过3个字符长度。
CHAR(3): 表示存储的数据不能超过3个字符长度。
INT(3):表示最大可以存储999。
BIGINT 长整型 相当于java里面的long。
FLOAT 单精度浮点型。
DOUBLE 双精度浮点型。 DOUBLE(7,2) 7表示7个有效数字,2表示2个小数位。
DATA 日期类型。 在实际开发中为了通用,所以日期类型一般不使用,采用字符串代替日期比较多。

目前,我们现在使用的已经可以支持中文了。

实际上说明创建表的结果来源于查询结果。

insert 上面基本说过。

视图:
将查询结果当作一个视图创建出来:create view myview as select * from emp;

查询视图:select * from myview;

验证一下:

删除这个视图,相当于删除这个表。有人会问了,直接删不就完了吗?
举例:
创建一个表,表的复制。
create emp3 as select * from emp;
删除表:delete from emp3;
此时表emp里面的数据还在。
而通过视图可以得到
create view myview select * from emp;
删除:
delete from myview;
此时emp表里面的数据都不在了。
删除表通过删除视图来实现,
视图重要作用:能够隐藏表的实现细节。

举例:

只能查 a , b , c 了。

这样查询是错误的

客户是一个保密性组织。对开发人员来说只知道视图,有个a,b,c 不知道代表啥意思,真正的数据库被隐藏。
你只需要完成增删改过程就行,其他不需要知道。
注意:后面只能跟DQL语句。

数据库设计三范式:
1,设计数据库表的时候所依据的规范,共三个规范
2,
第一范式:
要求有主键,并且要求每一个字段原子性不可再分
3 第二范式:
要求所有非主键字段完全依赖主键,不能产生部分依赖
4 第三范式:
所有非主产生键字段和主键字段之间不能产生传递依赖。

事务:
四个特性:
1)原子性:
事务包含的所有操作要么全部成功,要么全部失败回滚;成功必须要完全应用到数据库,失败则不能对数据库产生影响

2)一致性:事务执行前和执行后必须处于一致性状态,

3)隔离性:当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不被其他事务的操作所干扰,多个并发事务之间要相互隔离;
4)持久性:一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便在数据库系统遇到故障的情况下也不会丢失事物的操作。
分析网址:https://www.cnblogs.com/melody210218/p/7120559.html

创建主键有3种方法:
– 第一种添加主键的方式
CREATE DATABASE javaee20;
USE javaee20;
CREATE TABLE student(
sid INT PRIMARY KEY,
sname VARCHAR(30)
);
– constraint 约束 主键的第二种添加方式
– 图书的类别表category
CREATE TABLE category(
id INT,
NAME VARCHAR(20),
CONSTRAINT pk_id PRIMARY KEY(id));

– 第三种添加主键约束
CREATE TABLE teacher(
tid INT,
tname VARCHAR(50)
);
– 添加主键
ALTER TABLE teacher ADD CONSTRAINT pk_tid PRIMARY KEY(tid);

你可能感兴趣的:(数据库原理及其应用(学习笔记))