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

数据库基础

数据库基础笔记


常见数据库分类及特点

关系数据库(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基础

阅读
1,885
阅读预计7分钟
创建日期 2014-09-22
修改日期 2018-06-22
类别
标签
百度推荐