当前位置 : 首页 » 文章分类 :  开发  »  数据库基础

数据库基础

数据库基础笔记


数据处理分类

数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

联机事务处理OLTP

联机事务处理OLTP(on-line transaction processing) 主要是执行基本日常的事务处理,比如数据库记录的增删查改。比如在银行的一笔交易记录,就是一个典型的事务。
OLTP的特点一般有:
1.实时性要求高。我记得之前上大学的时候,银行异地汇款,要隔天才能到账,而现在是分分钟到账的节奏,说明现在银行的实时处理能力大大增强。
2.数据量不是很大,生产库上的数据量一般不会太大,而且会及时做相应的数据处理与转移。
3.交易一般是确定的,比如银行存取款的金额肯定是确定的,所以OLTP是对确定性的数据进行存取
4.高并发,并且要求满足ACID原则。比如两人同时操作一个银行卡账户,比如大型的购物网站秒杀活动时上万的QPS请求。

联机分析处理OLAP

联机分析处理OLAP(On-Line Analytical Processing) 是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。典型的应用就是复杂的动态的报表系统。
OLAP的特点一般有:
1.实时性要求不是很高,比如最常见的应用就是天级更新数据,然后出对应的数据报表。
2.数据量大,因为OLAP支持的是动态查询,所以用户也许要通过将很多数据的统计后才能得到想要知道的信息,例如时间序列分析等等,所以处理的数据量很大;
3.OLAP系统的重点是通过数据提供决策支持,所以查询一般都是动态,自定义的。所以在OLAP中,维度的概念特别重要。一般会将用户所有关心的维度数据,存入对应数据平台。

混合事务分析处理HTAP

HTAP(Hybrid Transactional Analytical Processing) 同时拥有 OLTP 和 OLAP 的能力。

OLTP与OLAP的区别
https://blog.csdn.net/bitcarmanlee/article/details/51011515

OLAP、OLTP的介绍和比较
https://blog.csdn.net/zhangzheng0413/article/details/8271322


常见数据库分类及特点

关系数据库(Relational Database):SQL Server,Oracle,MySQL,DB2
非关系数据库NoSQL:Redis,MongoDB

关系数据库的特点:
优点:稳定,数据一致性高,ACID特性;缺点:性能差,不能应付并发读写,扩展性差
NoSQL的特点:
不适用SQL作为查询语言,少使用联表查询

Redis
Key-Value型数据库,全部在内存中操作,速度非常快,主要用于高并发读写的情况
Redis现在属于VMware

MongoDB
可以在海量数据中快速查询,主要用海量数据的访问


关系数据库

概念模型:用户的观点
逻辑模型:关系模型,层次模型,网状模型
物理模型:存储方式

实体之间的联系,联系的多样性
(1) 一对一联系
(2) 一对多联系
(3) 多对多联系

主属性
主码中的属性称为主属性?错,不只主码中的属性,所有可做主码的候选码中的属性都是主属性
非主属性:不包含在任何候选码中的属性

关系操作


完整性约束

(1) 实体完整性(Entity Integrity):所有主属性都不能为空值(因为如果主属性可取空值,说明存在某个不可标识的实体)
单属性主键可在列级约束,多属性主键需要在表级约束。
primary key
(2) 参照完整性:
foreign key(Sno) references Student(Sno)
(3) 用户定义的完整性
NOT NULL
UNIQUE
CHECK(布尔表达式,例如Ssex In (‘男’,’女’),或 score>=0 AND score <=100)


触发器

CREATE TRIGGER <触发器名>
  < [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
  ON <表名>
  FOR EACH ROW
      AS BEGIN
        IF(触发条件)
            THEN 执行动作
        END IF
    END;

NEW:新数据,OLD:旧数据

例:教授工资不得低于4000

create trigger InsertUpdateOnSal
before insert or update on Teacher
for each row
as begin
    if(new.job='教授' AND new.sal< 4000)
        then new.sal = 4000;
    end if
end;

触发器和约束的对比
触发器更灵活,可实现更复杂的操作,可以实现约束的一切功能,
约束能够提供比较高的执行性能,容易维护


存取控制

授权

grant  <权限, 或角色>[, <权限>]...
on <对象类型><对象名>[,<对象类型><对象名>]...
to <用户, 或角色>[,<用户>]...
[with grant option];

with grant option:若带有此子句,获得权限的用户还可以将此权限授予其他用户;否则不可以

例:
grant select(或all privileges,或update(sno))
on table student
to u1, u2

收回
revoke …
on …
from …

创建用户

create user <用户名>
[with DBA | RESOURCE | CONNECT]
CONNECT:只能登录,由其他用户授予其权限
RESOURCE:可创建基本表和视图,不能创建模式
DBA:超级用户,拥有所有权限

并发控制

数据库并发控制:http://blog.csdn.net/xiangminjing/article/details/5922325

可能的数据不一致
(1) 丢失修改(Lost Update):
(2) 不可重复读(Non-Repeatable Read):前后两次读的数据不一致
(3) 读脏数据(Dirty Read):读的是不正确的数据

锁的类型
(1) 排它锁(Exclusive Lock),X锁,写锁
若事务 T 对数据对象 A 加上 X 锁,则只允许 T 读取和修改 A ,其他任何事务都不能再对 A 加任何类型的锁,直到 T 释放 A 上的锁。
(2) 共享锁(Share Lock),S锁,读锁
若事务 T 对数据对象 A 加上 S 锁,则事务 T 可以读 A但不能修改 A ,其他事务只能再对 A 加 S 锁,而不能加 X 锁,直到 T 释放 A 上的 S 锁。

可串行化
可串行化( Serializable )的调度是正确的调度。
可串行化的调度的定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行执行它们时的结果相同,称这种调度策略为可串行化的调度

两段锁协议(同时加锁,同时解锁,不可交叉进行)
(1)在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁
(2)在释放其中一个封锁之后,事务不再获得任何其他封锁。
遵守两段锁协议产生的是可串行化调度


索引

唯一索引:每个索引值对应唯一一条记录

聚簇索引:索引项的顺序与表中记录的物理顺序一致

(1) 聚簇索引适用于经常需要范围查询的列,因为一旦找到具有范围中第一个键值的行,具有后续索引值的行保证物理上毗连在一起而不必进一步搜索,避免了大范围扫描
(2) 聚簇索引中不要包含经常需要修改的列,因为键值修改后,数据行必须移动到新的位置

聚集索引相当于书籍脊背上那个特定的编号。如果对一张表建立了聚集索引,其索引页中就包含着建立索引的列的值(下称索引键值),那么表中的记录将按照该索引键值进行排序。比如,我们如果在“姓名”这一字段上建立了聚集索引,则表中的记录将按照姓名进行排列;如果建立了聚集索引的列是数值类型的,那么记录将按照该键值的数值大小来进行排列。

非聚集索引用于指定数据的逻辑顺序,也就是说,表中的数据并没有按照索引键值指定的顺序排列,而仍然按照插入记录时的顺序存放。其索引页中包含着索引键值和它所指向该行记录在数据页中的物理位置,叫做行定位符(RID:Row ID)。好似书后面的的索引表,索引表中的顺序与实际的页码顺序也是不一致的。而且一本书也许有多个索引。比如主题索引和作者索引。

create [unique][cluster] index <索引名>
on <表名> (<列名>[次序],…)


E-R图

Entity-Relationship,一种概念模型的表示方法

矩形表示实体
菱形表示实体间的联系
椭圆表示实体或联系的属性


存储过程

SQL 语句和流程控制语句的集合

优点:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权


事务Transaction

用户定义的一个数据库操作序列。

事务的ACID特性:
原子性(Atomicity):一组不可分割的操作
一致性(Consistency):事务的执行使数据库从一个一致状态转换为另一个一致状态
隔离性(Isolation):一个事务的执行不能被其他事务干扰
持续性(Durability):事务一旦提交,对数据库的修改时永久的

begin transaction
一些操纵
if 条件
commit; //提交
else
rollback; //回滚


上一篇 2014年运动记录

下一篇 SQL基础

阅读
评论
2.6k
阅读预计9分钟
创建日期 2014-09-22
修改日期 2021-06-25
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论