写在前:最近在准备找实习,在复习之前学习过的数据库知识,特写此博文总结之。
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
先复习到这里,后面有其他知识会陆续补充~~~