一、数据数据是数据库中存储的基本对象。1. 定义 :描述事物的符号记录。2. 种类 :文字、图像、图形、声音。3. 特点 :数据与其语义是不可分的。二、数据库1. 定义 :长期存储在计算机内、有组织的、可共享的大量数据。2. 特征 : 1)数据按一定的数据模型组织、描述和存储 2)可为各种用户共享 3)冗余度较小 4)数据性较高 5)易扩展三、数据库管理系统(DBMS) 1. 定义:数据库管理系统(Database Mament System 即DBMS)是位于用户与作系统之间的数据管理软件。 2. 用途 :科学地组织和存储数据、高效地获取和维护数据 3. 功能 :1)数据库定义功能 2)数据纵功能 3)数据库的运行管理 4)数据库的建立和维护功能(实用程序)四、数据库系统1. 定义:数据库系统是指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库和用户构成。2. 特点:数据结构化;数据的共享性高、冗余度低、易扩充;数据性高;数据由DBMS统一管理和控制。五、数据库管理技术1. 定义:对数据进行分类、组织、编码、存储、检索和维护,是数据处理的中心问题2. 发展过程:1)人工管理阶段(40年代中--50年代中)2)文件系统阶段(50年代末--60年代中)3)数据库系统阶段(60年代末--现在)3. 发展动力:1)应用需求的推动2)计算机硬件的发展3)计算机软件的发展六、 数据模型 1. 定义:数据模型(Data Model)也是一种模型,它是现实世界数据特征的抽象。 2. 作用:在数据库中用数据模型来抽象、表示和处理现实世界中的数据和信息。通俗地讲数据模型就是现实世界的模拟,现有的数据库系统均是基于某种数据模型的。 3. 三要素: 1)数据结构 2)数据作 3)完整性约束 4. 常用的数据模型: 1)层次模型 2)网状模型 3)关系模型:ORACLE、SQL、SYBASE、INFORMIX、DB/2、COBASE、PBASE、EasyBase、DM/2、OpenBase 4)面向对象模型 5. 层次: 1)概念模型:也称信息模型,它是按用户的观点来对数据和信息建模。 2)数据模型:主要包括网状模型、层次模型、关系模型等,它是按计算机系统的观点对数据建模七、关系模型 1. 基本概念: 1)关系:一个关系对应通常说的一张表。2)元组:表中的一行即为一个元组。3)属性:表中的一列即为一个属性,给每一个属性起一个名称即属性名。 2. 关系模型的优缺点: 优:1)建立在严格的数学概念的基础上2)概念单一,数据结构简单、清晰,用户易懂易用3)关系模型的存取路径对用户透明 缺:1)存取路径对用户透明导致查询效率往往不如非关系数据模型2)为提高性能,必须对用户的查询请求进行优化增加了开发数据库管理系统的难度 3. 关系模型的组成:关系数据结构、关系作、关系完整性约束 八、关系数据理论 1. 基本概念关系:描述实体、属性、实体间的联系。从形式上看,它是一张二维表,是所涉及属性的笛卡尔积的一个子集。关系模式:用来定义关系。关系数据库:基于关系模型的数据库,利用关系来描述现实世界。从形式 上看,它由一组关系组成。关系数据库的模式:定义这组关系的关系模式的全体。2. 范式: 范式是符合某一种级别的关系模式的。1)1NF的定义 若关系模式中的所有属性值都是不可再分的原子值,则称该种关系模式为范式。2)2NF的定义 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R ∈2NF。 3)3NF的定义 若一个数据表已满足2NF,且该数据表中的任何两个非主键字段的数值之间不存在函数依赖关系,则该数据表满足第三范式。
数据库基础知识大总结 数据库基础知识思维导图
数据库基础知识大总结 数据库基础知识思维导图
一、数据库基础知识
1. 基本概念:
数据库,数据模型,数据库管理系统,类和对象,。
2. 关系数据库基本概念:
关系模型(实体的完整性,参照的完整性,用户定义的完整性),关系模式,关系,元组,属性, 字段,域,值,主关键字等。
3. 关系运算基本概念:
选择运算,投影运算,连接运算。
4. SQL 基本命令:
查询命令,作命令。
5. Access 系统:
(1) Access 系统的'基本特点。
(2) 基本对象:表,查询,窗体,报表,页,宏,模块。
二、数据库和表的基本作
1. 创建数据库:
(1) 创建空数据库。
(2) 使用向导创建数据库。
2. 表的建立:
(1) 建立表结构:使用向导,使用表设计器,使用数据表。
(2) 设置字段属性。
(3) 输入数据:直接输入数据,获取外部数据。
3. 表间关系的建立与修改:
(1) 表间关系的概念:一对一,一对多。
(2) 建立表间关系。
(3) 设置参照完整性。
4. 表的维护:
(1) 修改表结构:添加字段,修改字段,删除字段,重新设置主关键字。
(2) 编辑表内容:添加记录,修改记录,删除记录,记录。
(3) 调整表外观。
5. 表的其他作:
(1) 查找数据。
(2) 替换数据。
(3) 排序记录。
(4) 筛选记录。
三、查询的基本作
1. 查询分类:
(1) 选择查询。
(2) 参数查询。
(3) 交叉表查询。
(4) 作查询。
(5) SQL 查询。
2. 查询准则:
(1) 运算符。
(2) 函数。
(3) 表达式。
3. 创建查询:
(1) 使用向导创建查询。
(2) 使用设计器创建查询。
(3) 在查询中计算。
4. 作已创建的查询:
(1) 运行已创建的查询。
(2) 编辑查询中的字段。
(3) 编辑查询中的数据源。
(4) 排序查询的结果。
写在文章前:本系列文章用于博主自己归纳复习一些基础知识,同时也分享给可能需要的人,因为水平有限,肯定存在诸多不足以及技术性错误,请大佬们及时指正。
存储过程 是事先经过编译并存储在数据库中的一段SQL语句的。想要实现相应的功能时,只需要调用这个存储过程就行了(类似于函数,输入具有输出参数)。
优点 :
缺点 :
Delete用来删除表的全部或者部分数据,执行delete之后,用户需要提交之后才会执行,会触发表上的DELETE触发器(包含一个OLD的虚拟表,可以只读访问被删除的数据),DELETE之后表结构还在,删除很慢,一行一行地删,因为会记录日志,可以利用日志还原数据;
Truncate删除表中的所有数据,这个作不能回滚,也不会触发这个表上的触发器。作比DELETE快很多(直接把表drop掉,再创建一个新表,删除的数据不能找回)。如果表中有自增(AUTO_INCREMENT)列,则重置为1。
Drop命令从数据库中删除表,所有的数据行,索引和约束都会被删除。不能回滚,不会触发触发器。
触发器(TRIGGER)是由(比如INSERT/UPDATE/DELETE)来触发运行的作(不能被直接调用,不能接收参数)。在数据库里以的对象存储,用于保证数据完整性(比如可以检验或转换数据)。
约束(Constraint)类型:
从数据库的基本表中通过查询选取出来的数据组成的虚拟表(数据库中只存放视图的定义,而不存放视图的数据)。可以对其进行增/删/改/查等作。视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变)。
可以跟基本表一样,进行增删改查作( 增删改作有条件限制,一般视图只允许查询作 ),对视图的增删改也会影响原表的数据。 它就像一个窗口,透过它可以看到数据库中自己感兴趣的数据并且作它们。 好处:
用于定位在查询返回的结果集的特定行,以对特定行进行作。使用游标可以方便地对结果集进行移动遍历,根据需要滚动或对浏览/修改任意行中的数据。主要用于交互式应用。它是一段私有的SQL工作区,也就是一段内存区域,用于暂时存放受SQL语句影响的数据,简单来说,就是将受影响的数据暂时放到了一个内存区域的虚表当中,这个虚表就是游标。
游标是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。即游标用来逐行读取结果集。游标充当指针的作用。尽管游标能遍历结果中的所有行,但他一次只指向一行。
游标的一个常见用途就是保存查询结果,以便以后使用。游标的结果集是由SELECT语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快的多。通俗来说,游标就是能在sql的查询结果中,显示某一行(或某多行)数据,其查询的结果不是数据表,而是已经查询出来的结果集。
简单来说:游标就是在查询出的结果集中进行选择性作的工具。
让缓存更高效。对于连接查询,如果其中一个表发生变化,那么整个查询缓存就无法使用。而分解后的多个查询,即使其中一个表发生变化,对其它表的查询缓存依然可以使用。分解成多个单表查询,这些单表查询的缓存结果更可能被其它查询使用到,从而减少冗余的查询。减少锁竞争。
索引是对数据库表中一列或多列的值进行排序的一种结构(说明是在列上建立的),使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。
当表中有大量记录时,若要对表进行查询,种搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O作。第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。
例如这样一个查询:select from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止。有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。
从应用上分, 主键索引(聚集) , 索引(聚集/非聚集) , 普通索引 , 组合索引 , 单列索引和全文索引
当然是基础学起了
先了解什么是数据库,数据库的作用,数据库的优点,各种类型的数据库特点
怎么样作数据库,比如建立数据库,表,字段,内容
如何进行数据库查询
数据库实验总结【一】 试验内容
1、 数据表的建立
基本表《简单的》带有主键
带有外码约束的(外码来自其他表或者本表)
2、 数据表的修改
添加删除列
修改列属性类型
添加删除约束(约束名)
元组的添加,修改,删除
删除数据表
试验过程
1、create table student
(sno char(9) primary key , /sno是主码 列级完整性约束条件/
sname char(20) unique, /sname取值/
s char(2),
sage allint, /类型为allint/
sdept char(20) /所在系/
);
create table course
(cno char(4) primary key, /列级完整性约束条件,cno是主码/
cname char(40),
cpno char(4), /cpno的含义是先行课/
ccredit allint,
foreign key (cpno) references course(cno)
/表级完整性约束条件,cpno是外码,被参照表是course,被参照列是cno/
);
create table sc
(sno char(9),
cno char(4),
grade allint,
primary key (sno,cno),
/主码有两个属性构成,必须作为表级完整性进行定义/
foreign key (sno) references student(sno),
/表级完整性约束条件,sno是外码,被参照表是student/
foreign key (cno) references course(cno),
/表级完整性约束条件,cno是外码,被参照表示course/
);
例1、create table s
(cno varchar(3), /变长的字符串,输入2个字符就是两个字符不会补空格/
sname varchar(20),
status int,
city varchar(20),
constraint pk_sno primary key(sno), /约束条件的名字为pk_sno/
);
create table p
(pno varchar(3),
pname varchar(20),
color varchar(3),
weight int,
constraint pk_pno primary key (pno), /约束条件的名字是pk_pno/
);
create table j
(jno varchar(3),
jname varchar(20),
city varchar(20),
constraint pk_jno primary key(jno) /约束条件的名字为pk_jno/
);
例2、create table spj
(sno varchar(3), /个表中的主码/
pno varchar(3),
jno varchar(3),
qty int, /数量/
constraint pk_spj primary key(sno,pno,jno), /主码由3个属性组成/
foreign key(sno) references s(sno),
/表级完整性约束条件,sno是外码,被参照表是s/
foreign key(pno) references p(pno),
/表级完整性约束条件,pno是外码,被参照表是p/
foreign key(jno) references j(jno),
/表级完整性约束条件,jno是外码,被参照表是j/
);
2、数据表的更改
在s表中添加一个concat 列
alter table s add concat varchar(20)
在s表中删除concat 列
alter table s drop column concat
更改s表 concat列的属性 把长度由20改为30
alter table s alter column concat varchar(30)
名字为concat 修改属性为的 属性名为con_concat
alter table s add constraint con_concat unique(concat)
删除约束关系con_concat
alter table s drop constraint con_concat
/插入一个元组/
insert into s valus(‘s1’,’精益’,20,’天津’) /20不能写成’20’/
试验中的问题的排除与总结:
1、在创建spj时
有三个实体所以从3个实体中取主码,还有一个数量属性也要写上
主码由那3个主码确定
2、更改一个数据库中数据表时一定要先使该数据库处于正在使用状态
3、constraint
是可选关键字,表示 primary key、not null、unique、foreign key 或 check 约束定义的开始。约束是特殊属性,用于强制数据完整性并可以为表及其列创建索引。
4、--go可以不加但是要注意顺序 注:go --注释 提示错误
5、注意添加一个空元素用 null
附 sql备份
--创建一个数据库 student
create database student
go
--在数据库student中创建表student course sc 注意顺序
use student
----------------------------------------------------------------
create table student
(sno char(9) primary key, /sno是主码 列级完整性约束条件/
sname char(10) unique, /sname取值/
s char(2),
sage allint, /类型为allint/
sdept char(20) /所在系/
); /;要加/
-----------
数据库实验总结【二】
我在sql server 索引基础知识系列中,篇就讲了记录数据的基本格式。那里主要讲解的是,数据库的最小读存单元:数据页。一个数据页是8k大小。
对于数据库来说,它不会每次有一个数据页变化后,就存到硬盘。而是变化达到一定数量级后才会作这个作。 这时候,数据库并不是以数据页来作为作单元,而是以64k的数据(8个数据页,一个区)作为作单元。
区是管理空间的基本单位。一个区是八个物理上连续的页(即 64 kb)。这意味着 sql server 数据库中每 mb 有 16 个区。
为了使空间分配更有效,sql server 不会将所有区分配给包含少量数据的表。sql server 有两种类型的区:
统一区,由单个对象所有。区中的所有 8 页只能由所属对象使用。
混合区,最多可由八个对象共享。区中八页的每页可由不同的对象所有。
通常从混合区向新表或索引分配页。当表或索引增长到 8 页时,将变成使用统一区进行后续分配。如果对现有表创建索引,并且该表包含的行足以在索引中生成 8 页,则对该索引的所有分配都使用统一区进行。
为何会这样呢?
其实很简单:
读或写 8kb 的时间与读或写 64 kb的时间几乎相同。
在 8 kb 到 64 kb 范围之内,单个磁盘 i/o 传输作所花的时间主要是磁盘取数臂和读/写磁头运动的时间。
因此,从数学上来讲,当需要传输 64 kb 以上的 sql 数据时,
尽可能地执行 64 kb 磁盘传输是有益的,即分成数个64k的作。
因为 64 kb 传输基本上与 8 kb 传输一样快,而每次传输的 sql server 数据是 8 kb 传输的 8 倍。
我们通过一个实例来看 有and 作符时候的最常见的一种情况。我们有下面一个表,
create table [dbo].[member]( [member_no] [dbo].[numeric_id] identity(1,1) not null, [lastname] [dbo].[shortstring] not null, [firstname] [dbo].[shortstring] not null, [middleinitial] [dbo].[letter] null, [street] [dbo].[shortstring] not null, [city] [dbo].[shortstring] not null, [state_prov] [dbo].[statecode] not null, [country] [dbo].[countrycode] not null, [mail_code] [dbo].[mailcode] not null, [phone_no] [dbo].[phonenumber] null, [photograph] [image] null, [issue_dt] [datetime] not null default (getdate()), [expr_dt] [datetime] not null default (dateadd(year,1,getdate())), [region_no] [dbo].[numeric_id] not null, [corp_no] [dbo].[numeric_id] null, [prev_balance] [money] null default (0), [curr_balance] [money] null default (0), [member_code] [dbo].[status_code] not null default (' '))
这个表具备下面的四个索引:
索引名 细节 索引的列
member_corporation_link nonclustered located on primary corp_no
member_ident clustered, unique, primary key located on primary member_no
member_region_link nonclustered located on primary region_no
memberfirstname nonclustered located on primary firstname
当我们执行下面的sql查询时候,
select m.member_no, m.firstname, m.region_nofrom dbo.member as mwhere m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000go
sql server 会根据索引方式,优化成下面方式来执行。
select a.member_no,a.firstname,b.region_nofrom(select m.member_no, m.firstname from dbo.member as m where m.firstname like 'k%' and m.member_no < 5000) a , -- 这个查询可以直接使用 memberfirstname 非聚集索引,而且这个非聚集索引覆盖了所有查询列-- 实际执行时,只需要 逻辑读取 3 次
(select m.member_no, m.region_no from dbo.member as mwhere m.region_no > 6) b
-- 这个查询可以直接使用 member_region_link 非聚集索引,而且这个非聚集索引覆盖了所有查询列-- 实际执行时,只需要 逻辑读取 10 次
where a.member_no = b.member_no
不信,你可以看这两个sql 的执行,以及逻辑读信息,都是一样的。
其实上面的sql,如果优化成下面的方式,实际的逻辑读消耗也是一样的。为何sql server 不会优化成下面的方式。是因为 and 作符优化的另外一个原则。
1/26 的数据和 1/6 的数据找交集的速度要比 1/52 的数据和 1/3 的数据找交集速度要慢。
select a.member_no,a.firstname,b.region_nofrom(select m.member_no, m.firstname from dbo.member as mwhere m.firstname like 'k%' -- 1/26 数据) a,
(select m.member_no, m.region_no from dbo.member as mwhere m.region_no > 6 and m.member_no < 5000-- 1/3 1/ 2 数据) bwhere a.member_no = b.member_no
当然,我们要学习sql 如何优化的话,就会用到查询语句中的一个功能,指定查询使用哪个索引来进行。
比如下面的查询语句
select m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (0))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000go
select m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (1))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000goselect m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (membercovering3))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000goselect m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (memberfirstname, member_region_link))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000go
这里 index 计算符可以是 0 ,1, 指定的一个或者多个索引名字。对于 0 ,1 的意义如下:
如果存在聚集索引,则 index(0) 强制执行聚集索引扫描,index(1) 强制执行聚集索引扫描或查找(使用性能的一种)。
如果不存在聚集索引,则 index(0) 强制执行表扫描,index(1) 被解释为错误。
总结知识点:
简单来说,我们可以这么理解:sql server 对于每一条查询语句。会根据实际索引情况(sysindexes 系统表中存储这些信息),分析每种组合可能的成本。然后选择它认为成本最小的一种。作为它实际执行的。
成本代价计算的一个主要组成部分是逻辑i/o的数量,特别是对于单表的查询。
and 作要满足所有条件,这样,经常会要求对几个数据集作交集。数据集越小,数据集的交集计算越节省成本。
的项目中,竟然出现了滥用聚集索引的问题。看来没有培训最最基础的索引的意义,代价,使用场景,是一个非常大的失误。这篇博客就是从这个角度来罗列索引的基础知识。
使用索引的意义
索引在数据库中的作用类似于目录在书籍中的作用,用来提高查找信息的速度。
使用索引查找数据,无需对整表进行扫描,可以快速找到所需数据。
使用索引的代价
索引需要占用数据表以外的物理存储空间。
创建索引和维护索引要花费一定的时间。
当对表进行更新作时,索引需要被重建,这样降低了数据的维护速度。
创建索引的列
主键
外键或在表联接作中经常用到的列
在经常查询的字段上建立索引
不创建索引的列
很少在查询中被引用
包含较少的惟一值
定义为 text、ntext 或者 image 数据类型的列
heaps是staging data的很好选择,当它没有任何index时
excellent for high performance data loading (parallel bulk load and parallel index creation after load)
excellent as a partition to a partitioned view or a partitioned table
聚集索引提高性能的方法,在前面几篇博客中分别提到过,下面只是一个简单的大纲,细节请参看前面几篇博客。
何时创建聚集索引?
clustered index会提高大多数table的性能,尤其是当它满足以下条件时:
独特, 狭窄, 静止: 最重要的条件
持续增长的,是只向上增加。例如:
identity
date, identity
guid (only when using newsequentialid() function)
聚集索引性(独特型的问题)
由于聚集索引的b+树结构的叶子必须指向具体数据。如果你要建立聚集索引的列不,并且你指定的创建的聚集索引是非的聚集索引,则会有以下情况:
如果未使用 unique 属性创建聚集索引,数据库引擎 将向表自动添加一个四字节 uniqueifier 列。必要时,数据库引擎 将向行自动添加一个 uniqueifier 值,使每个键。此列和列值供内部使用,用户不能查看或访问。
可以看看最初级的SQL书籍,基本的了解的不多了可以买本《SQL编程实用大全》
你可以先了解表的创建,修改,查询等命令,这些对编程的人来说不会很难的~!
呵呵
版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 836084111@qq.com 邮箱删除。