初涉数据库
数据库基础知识总结(MS sql)
基本概念
数据:描述事物的符号称为数据,是存储在数据库中的基本对象。
数据库:数据库是长期存储在计算机上内的有组织、可共享的数据集合。
数据库管理系统:用户和操作系统之间的一层数据管理软件。主要功能包括如下几个方面:
>1 数据定义功能:通过数据定义语言DDL(Data Definition Language)实现数据对象的定义
>2 数据组织、存储和管理
>3 数据操纵:通过数据操纵语言DML(Data Manipulation Language),用户可以使用DML操纵数据,实现对数据库的的增、删、改、查等基本操作
>4 数据库的事务管理和运行管理
>5 数据库的建立和维护功能
4、数据库系统:计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、数据库管理员组成。
5、数据模型:对现实世界数据特征的抽象,用来描述数据、组织数据和对数据进行操作的。是数据库系统的基础和核心。
按照应用目的的不同,可以将其分为两类:概念模型、第二类逻辑模型和物理模型。
概念模型,又称信息模型,按照用户的观点来对数据和信息建模,主要用于数据库设计。
概念模型中的基本概念:
实体:客观存在并可相互区别的事物称为实体
属性:实体所具有的某一特性称为属性
码:唯一标识实体的属性集称为码,例如学生实体的学号就是学生实体的码
域:一组具有数据类型的值的集合。例如学生成绩的域为整数
实体型:实体名及其属性名集合来抽象刻画同类实体,称为实体型。
实体集:同一类型实体集合称为实体集,例如全体学生
联系:分为实体内部(实体的各个属性之间的联系)的联系和实体间的联系(不同实体集之间的联系)
逻辑模型是按照计算机系统的观点对数据进行建模,主要用于DBMS的实现
主要包括层次模型、网状模型、关系模型、对象关系模型、面向对象模型。
物理模型:是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,是面对计算机系统的。
数据模型一般由数据结构、数据操作、完整性约束组成
数据结构:描述数据库的组成对象以及各对象之间的联系,是刻画数据库性质最重要的部分,是对系统的静态描述。
数据操作:对数据库中的各种对象的实例允许执行的操作的集合,包括操作及有关的操作规则,数据库主要有查询和更新(增、删、改)两大类操作,是对系统的动态描述
数据的完整性描述:给定的数据模型中的数据及其联系所具有的制约和运存规则,用以限定符合数据模型的数据模型的数据库状态以及状态的变化,以保证数据的正确,有效,相容性。
6、实体之间的联系
两个实体模型之间的联系可以分为三种:
①一对一联系
对于实体集A中的每个实体,实体集B中至多有一个(也可以没有)实体与之联系。
②一对多联系
对于实体集A中的每个实体,在实体集B中有n个实体与之联系
③多对多联系
对于实体集A中的每个实体,实体集B中有n个实体与之联系,反之,对于实体集B中的每个实体,实体集A中也有n个实体与之联系。
7、实体-联系图(E-R图)
实体型:用矩形表示,矩形框内些实体名
属性:用椭圆表示,并用无向边将其与相应的实体型连接起来
联系:用菱形表示,菱形框内写明联系名,并用无向边分别于相应的实体型连接起来同时在无向边旁标上联系的类型(一对一、一对多等)
8、关系数据模型的数据结构
关系模型中的一些术语:
关系:一个关系对应数据库中的一张二维表
元组:表中的一行即为一个元组
属性:表中的一列即为属性,列名即属性名
分量:元组中的一个属性值
9、数据库系统模式
模式:数据库中全体数据的逻辑结构和特征的描述
>9.1 数据库的三级模式结构
模式(三级模式结构中的一级,非上述的模式):也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是数据库数据在逻辑级上的视图,一个数据库只能有一个模式
外模式:又称子模式或用户模式,它是数据库用户(包括程序开发人员和最终用户)能够看见的一部分数据的逻辑结构和特征的描述,是数据库用户的数据视图,是于某一应用有关的数据的逻辑显示。
一个数据库可以有多个外模式,同一外模式可以为某一用户的多个应用系统所使用,但一个应用程序只能使用一个外模式。
内模式:也称存储模式,一个数据库只有一个内模式,他是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。
>9.2 数据库的二级影像功能与数据独立性
为了在系统内部实现着3个抽象层次的联系和转换,数据库管理系统在这三级模式之间提供了两层影像:
外模式/模式影像:定义外模式于模式之间的对应关系
模式/内模式影像 :定义数据全局逻辑结构和存储结构间的对应关系
>9.3 数据库的逻辑独立性
当模式改变时(如增加新的关系、新的属性、改变属性的数据类型等),由数据库管理员对各个外模式/模式的影像做相应的改变,可以使外模式保持不变。(应用程序是根据外模式编写的)从而使应用程序不用改变),保证数据与应用程序的逻辑独立性。
>9.4 数据库的物理独立性
当数据库的存储结构改变时,有数据库管理员对模式/内模式做相应的改变,可以使模式保持不变,从而使应用程序保持不变,保证了数据与应用程序间的独立性。
10、关系模型中的基本概念
(1)关系:D1xD2xD3……Dn的子集叫做在于D1、D2…Dn上的关系,表示为R(D1,D2,D3….Dn),其中n为关系的目或度,当n=1时,称为一元关系
(2)关系模式:关系的描述称为关系模式,可以形象的概括为?R(U,D,DOM,F)
R为关系名,U为组成该关系的属性名的集合,D为属性组U中属性所来自的域,DOM为属性向域的影像的集合,F为属性间数据的依赖关系集合。
10.1 关系的三类完整性约束
实体完整性约束:若属性(指一个或一组属性)A是基本关系R的主属性,则A不能为空
参照完整性:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中的每个元组在F上的值必须为:
或者取空值
或者等于S中某个元组的主码值
注:什么叫外键?
设F是基本关系R的一个或一组属性,但不是R的码,Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外键。并称关系R为参照关系,基本关系S为被参照关系。
用户自定义的完整性
针对某一具体关系数据库的约束条件。它反映某一具体应用所涉及的数据必须满足的语义条件。
Check 约束
Check约束可以和列关联,也可以和表关联,可以检查一列值相对于同一表中另一列的值,也可以检查某一列的值是否符合某个标准
Eg:
2) 唯一性约束
限制某一列的值在整张表中必须是唯一的
3)Default约束
和所有约束一样,DEFAULT约束也是表定义的一个组成部分,它定义了当插入的新行对于定义了默认约束的列未提供相应数据时该怎么办。可以定义它为一个字面值(例如,设置默认薪水为0,或者设置字符串列为"UNKNOWN"),或者某个系统值(getdate())。
对于DEFAULT约束,要了解以下几个特性:
1、默认值只在insert语句中使用-在update语句和delete语句中被忽略。
2、如果在insert语句中提供了任意值,那就不使用默认值。
3、如果没有提供值,那么总是使用默认值。
注意:如果使用默认值,则在插入数据是不能省略表名后的列名
11、关系模型中的关系操作
关系模型中常用的关系操作有查询和插入、删除、修改,关系操作的对象和结果都是集合。
12、关系模型中的关系运算
选择:在关系R中选择满足条件的诸元组
投影:从R中选择出若干属性列组成新的关系
连接:从两个关系的笛卡尔积中选取属性间满足一定条件的元组
基本SQL语句
定义模式
Create Schema <模式名> AUTHORZATION <用户名>
Eg: Create Schema "S-T" AUTHORZATION Test
如果没有指明模式名,则模式名默认为用户名
删除模式
Drop Schema <模式名> <CASCADE>|RESTRICT>
CASCADE:级联模式,删除模式时将该模式下的所有数据库对象一起删除
RESTRICT:限制模式,只有在要删除的模式下没有任何对象属性时才能执行的删除。
在执行删除模式时,这两个必须选其一
定义基本表
Create table 表名(列名,数据类型 [列级完整性约束])
Eg:create table test(
Id int primary key identity(1,1),//设置表主键 identity(表示为自增主键,identity(标识种子,标识增量))
UserName nvarchar(20) not null,
foreign key CardId varchar(20) References Test(id)//设置外键,References设置外键表及外键列
)
注:创建表时设置多列主键
将表中以存在的列设置为外键
2.1 修改基本表
Alter table 表名
Add <列名> <数据类型> [列级完整性约束] /*新增一列*/
注意:不管原来表中是否有数据,新增列的值均为Null
Alter column <列名> <数据类型> /*修改现有列*/
Drop <完整性约束名> /*去除约束*/
2.1 删除基本表
命令基本格式:Drop table <表名>
表的级联删除:
假设现有Student 和 Gender两张表,Student 表有外键Gender,现欲在删除Gender中的项时将Student中有之关联的项也删除
给Student 表设置外键时指定级联删除
给Gender表设置触发器
2.2 表数据更新
2.2.1 插入数据
Insert into <表名[<属性列1>…]>
values(<常量1>,<常量2>……),()……..
2.2.2 清空表数据
Delete from <表名>
Truncate table <表名>
2.2.3 修改数据
Update <表名>
Set <属性名1> = value1,<属性名2> = value2…….
Where 更新条件
2.3 数据查询
2.3.1 选出表中的若干列
Select <列名1>,<列名2>…
From <表名>
2.3.2 查询全部列
Select * from <表名>
2.3.3 取消重复行(通过关键字distinct)
Select distinct Sno from Student
若果没有指明 distinct关键字,则默认为all,即显示全部结果
2.3.4 根据指定条件查询
Select <列名1>,<列名2>
From 表名
Where 查询条件
常用查询条件
比较 >< =、=>、!=、<>、!>(不大于)
确定范围 between and/not between and
空值判断 is null /is not null
多重条件 and/or/not
确定集合 in/not in
字符匹配(通过Like关键字实现) % :匹配任意多个字符
_: 任意单个字符
Eg: where name like '%明' 查询名字中含有'明'字的
注意:如果用户查询的字符串本身含有通配符%或_时,需要使用Escape'换码字符',对通配符进行转义
Where currency like '\_明' escape '\'
这样'\'后面的'_'将不再具有通配符的语义,而仅仅表示普通的字符
order by 和group by
3.1 order by
Order by 列名 [ASC(升序,默认值)|DESC(降序)]
Eg :
注意:对于空值排序时不同的数据库系统可能有不同的实现
3.2 group by
Select <列名1>,<列名2>…. From <表名>
Group by <列名>
Having 聚合函数
注意:select 后面跟的列名必须出现在Group by字句或聚合函数中
聚合函数(即对排序或分组后的集合进行处理):
Count([Distinct|ALL]*) 统计元组个数
Count([Distinct|All<列名>]) 统计一列中值的个数
SUM([Distinct|ALL]<列名>) 统计一列中值的总和
AVG([Distinct|ALL] <列名>) 统计一列值的平均值
Max([Distinct|ALL])/Min([Distinct|ALL]) 求一列中的最大值/最小值
4.嵌套查询
4.1 带有In谓词的子查询
Eg :
4.2 带有比较运算符的子查询
4.3 带有any 或all谓词的子查询
Eg:找出所有学生中年龄最大的学生(年龄大于等于集合中最大的元素)
找出其它部门学生中比IS部门任何人年龄都小的学生
4.4 带有Exitsts谓词的子查询
Exitsts代表存在量词,不返回任何数据,只产生逻辑真或假
Eg:
判断Student表中是否有Tom,如果存在则将其Sdept,Sno,Sname信息显示出来
注:存在Exists的子查询,只有Exists字句返回true时,外层查询才执行
集合操作
Select语句查询的结果是元组的集合,多个集合可以进行结合操作,集合的操作包括并操作(Union)、交操作(INTERSECT)、差操作(EXCEPT)
并操作 :
找出 IS部门和MA部门中所有年龄大于20岁的人员信息
交操作:
找出选修了2号和4号课的学生学号
差操作:
找出所有的女生信息
视图
视图:视图是从一个或多个基本表(或视图)导出的表。但它与基本表不同,数据库中值存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的表中。
视图的作用:
视图机制使用户可以将注意力集中在所关心的数据上。如果这些数据不是直接来自基本表,则可以通过定义视图,使得数据库看起来结构简单、清晰,并且可以简化用户的数据查询操作。
视图可以使用户以多种角度看待同一数据
视图对重构数据库提供了一定程度的逻辑独立性
因为隐藏了底层的表结构,所以大大加强了安全性,用户只能看到视图提供的数据
使用视图,方便了权限管理,让用户对视图有权限而不是对底层表有权限进一步加强了安全性
行列子集视图:若一个视图是从单个基本表导出,并且只是去除了基本表的某些列,但保留了主码,则称这类视图为行列子集视图。
带表达式的视图:带有虚拟列(基本表中并未定义而是由其他列计算出来的列)的视图称为带表达式的视图
5.1 建立视图
Create View <视图名> [<列名1>,[列名2]。。。]//属性列名要么全指定,要么全部指定,第二种情况下,视图的属性列名由子查询中select字句中目标列中的诸字段组成
As 子查询//任意的select语句,
[with check option]//指定该语句,则对视图进行操作的行要满足视图中定义的谓词条件()即子查询中的表达式
关于 With check option的理解:
通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如你insert,那么加的这条记录在刷新视图后必须可以看到;如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。
5.2 删除视图
Drop view 视图名 [Cascade]
如果该视图上还导出了其它视图,则指明CASCADE删除,则删除该视图时,会一并删除所有导出的视图
5.3 查询视图(与表查询类似)
5.4 更新视图(与更新表类似)
并非所有的视图都是可更新的,行列子集视图一般是可更新的
索引的建立与删除
索引的作用:建立索引是加快查询速度的有效手段
6.1 建立索引
Create index[Unique|CLUSER] index <索引名>
On <表名>(<列名>[次序])
Unique表示索引中的每一个索引值只对应唯一的数据记录。
Cluster 表示要建立的索引是聚簇索引。
聚簇索引:索引项的顺序与表中记录的物理顺序一致的索引组织
用户可以在经常查询的列上建立聚簇索引以提高查询效率。显然在一个基本表上最多只能建立一个聚簇索引。
注意:建立局促索引后,更新该索引列上的数据时,往往会导致表中记录的物理顺序的变更,代价较大,因此对于经常更新的列不宜创建聚簇索引
6.2 索引的删除
Drop index <索引名>//删除索引时,系统同时会从数据字典中删去该索引的描述
存储过程
7.1 创建存储过程
Create proc <存储过程名> 参数名 参数类型…..
As
[begin]
<PL/SQL>//其中包括声明部分和可执行部分
[end]
Eg:MS sql server
7.2 存储过程的执行
Call/perform procdure 存储过程名(参数列表)
注意:在MS sql 中使用 exec 存储过程名 参数列表形式来调用存储过程,
在存储过程中亦可以调用其它的存储过程
7.3 删除存储过程
Drop procdure <存储过程名>
存储过程详解:http://www.cnblogs.com/knowledgesea/archive/2013/01/02/2841588.html
PL/SQL
8.1 变量和常量的定义
变量名 数据类型 [not null] :=初值表达式
变量名 数据类型 [not null ] 初值表达式
常量名 数据类型 [not null] :=初始化表达式
8.2 条件控制语句
If condition Then
语句序列(条件为真时执行)
End If
If condition Then
语句序列(条件为真时执行)
Else
语句序列(条件为假或null时执行)
End If
8.3 循环语句
Loop
语句序列
End Loop
While condition Loop
语句序列
End Loop
For count IN [Reverse] bound1…bound2 Loop
语句序列
End Loop
Count:循环的下界bound1,检查它是否小于上界bound2,当指定Reverse时,count为循环的上界,检查它是否大于下界bound1,如果越界,则执行跳出循环,然后按照步长更新,count,重新判断条件。
《此篇摘自空城守望城空的博客》