[数据库]数据库基础知识复习

  • DQLDMLDDLDCL
    • 数据查询语言DQL
    • 数据操纵语言DML
    • 数据定义语言DDL
    • 数据控制语言DCL
  • 数据库中的五大约束
  • 数据库范式
    • 1NF
    • 2NF
    • 3NF
    • BCNF
  • 存储过程
    • 存储过程的好处

写在前:最近在准备找实习,在复习之前学习过的数据库知识,特写此博文总结之。

DQL、DML、DDL、DCL

SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,
数据定义语言DDL,数据控制语言DCL。

1. 数据查询语言DQL

数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE
子句组成的查询块:
SELECT <字段名表>
FROM <表或视图名>
WHERE <查询条件>

2. 数据操纵语言DML

数据操纵语言DML(DML database manipulation language)主要有三种形式:
1) 插入:INSERT
2) 更新:UPDATE
3) 删除:DELETE

3. 数据定义语言DDL

数据定义语言DDL用来创建数据库中的各种对象—–表、视图、
索引、同义词、聚簇等如:
CREATE TABLE/VIEW/INDEX/SYN/CLUSTER

4. 数据控制语言DCL

数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制
数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
1) GRANT:授权。
2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
回滚—ROLLBACK
回滚命令使数据库状态回到上次最后提交的状态。其格式为:
SQL>ROLLBACK;
3) COMMIT [WORK]:提交。
参考资料:Kevin的博客。

数据库中的五大约束

(1)主键约束(Primay Key Coustraint)

唯一性,非空性

示例:
添加主键约束(将stuNo作为主键)
alter table stuInfo
add constraint PK_stuNo primary key (stuNo)

(2)唯一约束 (Unique Counstraint)

唯一性,可以空,但只能有一个

示例:
添加唯一约束(身份证号唯一,因为每个人的都不一样)
alter table stuInfo
add constraint UQ_stuID unique(stuID)

(3)检查约束 (Check Counstraint)

对该列数据的范围、格式的限制(如:年龄、性别等)

示例:
添加默认约束(如果地址不填 默认为“地址不详”)
alter table stuInfo
add constraint DF_stuAddress default (‘地址不详’) for stuAddress

(4)默认约束 (Default Counstraint)

该数据的默认值

示例:
添加检查约束 (对年龄加以限定 15-40岁之间)
alter table stuInfo
add constraint CK_stuAge check (stuAge between 15 and 40)
alter table stuInfo
add constraint CK_stuSex check (stuSex=’男’ or stuSex=’女′)

(5)外键约束 (Foreign Key Counstraint)

需要建立两表间的关系并引用主表的列

示例:
添加外键约束 (主表stuInfo和从表stuMarks建立关系,关联字段stuNo)
alter table stuInfo
add constraint FK_stuNo foreign key(stuNo)references stuinfo(stuNo)
(注:本节参考自:http://www.2cto.com/database/201304/199872.html)

数据库范式

1NF

1NF要求, 数据库表的每一列都是不可分割的基本数据项 。同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复是属性。

2NF

2NF要求属性完全依赖于主键。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。如:

( 学号 , 课程名称 ) → ( 姓名 , 年龄 , 成绩 , 学分 )

这个数据库表不满足第二范式,因为存在如下决定关系:

( 课程名称 ) → ( 学分 )
( 学号 ) → ( 姓名 , 年龄 )

3NF

如果关系模式 R 是第二范式,且每个非主属性都不传递依赖于 R 的候选键,则称 R 满足3NF的。

假定学生关系表为 Student( 学号 , 姓名 , 年龄 , 所在学院 , 学院地点 , 学院电话 ) ,关键字为单一关键字 ” 学号 ” ,因为存在如下决定关系:

( 学号 ) → ( 姓名 , 年龄 , 所在学院 , 学院地点 , 学院电话 )

这个数据库是符合 2NF 的,但是不符合 3NF ,因为存在如下决定关系:

( 学号 ) → ( 所在学院 ) → ( 学院地点 , 学院电话 )

即存在非关键字段 ” 学院地点 ” 、 ” 学院电话 ” 对关键字段 ” 学号 ” 的传递函数依赖。

BCNF

BCNF的要求比3NF更为严格。在3NF的基础上消除主属性间的传递依赖后就满足BCNF了。
下面是主属性间存在传递依赖的例子。
假设仓库管理关系表为 StorehouseManage( 仓库 ID, 存储物品 ID, 管理员 ID, 数量 ) ,且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:

( 仓库 ID, 存储物品 ID) → ( 管理员 ID, 数量 )
( 管理员 ID, 存储物品 ID) → ( 仓库 ID, 数量 )

所以, ( 仓库 ID, 存储物品 ID) 和 ( 管理员 ID, 存储物品 ID) 都是 StorehouseManage 的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:

仓库 ID → 管理员 ID
管理员 ID → 仓库 ID

即存在关键字段决定关键字段的情况,所以其不符合 BCNF 范式

参考资料:http://blog.csdn.net/scnujack/article/details/6539642

存储过程

存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。

存储过程的好处

1.由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。

2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。

3.通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。提高系统的安全性,防止SQL注入。

4、允许模块化程序设计,类似方法的复用。

参考资料:http://www.cnblogs.com/knowledgesea/archive/2013/01/02/2841588.html

先复习到这里,后面有其他知识会陆续补充~~~

你可能感兴趣的:(数据库,存储,复习)