SQL
包括四种主要程序设计语言类别的语句
数据定义语言(DDL)
DDL (数据定义语言)
命令有CREATE、ALTER、DROP
描述 数据库的局部逻辑结构
DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用
于描述数据库中要存储的现实世界实体的语言。
一个数据库模式包含该数据库中所有实体的 描述定义
。
包括结构定义、操作方法定义
DDL数据库模式定义语言是SQL语言的组成部分
数据操作语言(DML)
SELECT、UPDATE、INSERT、DELETE
4条命令是用来对数据库里的数据进行操作的语言
数据控制语言(DCL)
是数据库控制功能
设置或更改数据库用户或角色权限的语句
事务控制语言(TCL)。
http://www.jb51.net/article/40359.htm
码
所有码都是一个集合
码就是能唯一标识实体的属性
它包括超码,候选码,主码
。
超码
超码是一个或多个属性的集合
如果K是超码,那么所有包含K的集合也是超码。
属性可以让我们在一个实体集中唯一地标识一个实体
候选码
能够唯一标识一个元组的最小属性组
候选码是最小超码
可以有多个
{id}{身份证}
主码
从多个候选码中任意选出一个做为主码,如果候选码只有一个,那么候选码就是主码。
主属性
候选码中的属性
非码属性
不包含在任何候选码中的属性
http://blog.youkuaiyun.com/g_beginner/article/details/6773288
数据库特点
数据结构化
数据的共享性高,冗余度低,易扩充
数据独立性高
数据由DBMS统一管理和控制
数据模型
独立于计算机系统的模型, 称为概念模型
真实世界中问题域内的事物的描述
记号、内涵、外延,
其中记号和内涵(视图)是其最具实际意义的
直接面向数据库的逻辑结构, 称为实施模型
DBMS
数据库管理系统
操纵和管理数据库的大型软件
用户和数据库之间的一层数据管理软件
视图
计算机数据库中的视图,是一个虚拟表,其内容由查询定义
真实的表一样,视图包含一系列带有名称的列和行数据。
视图并不在数据库中以存储的数据值集形式存在
行和列数据来自由定义视图的查询所引用的表,
并且在引用视图时动态生成。
对表能够进行的一般操作都可以应用于视图
如查询,插入,修改,删除操作等
视图是从一个或多个基本表导出的表,它是虚表
某一用户可以定义若干个视图
视图是一个 ” 虚表 ” ,视图的构造基于 基本表或视图
创建表
USE 数据库名 CREATE TABLE 表名 (列名 类型(大小) DEFAULT’默认值’,
列名 类型(大小) DEFAULT'默认值',
列名 类型(大小) DEFAULT'默认值',
... ...);
实体完整性规则
用户定义完整性包括:
属性值限制:
如列值非空(not null)、列值唯一(unique)、检查列值是否满足一个条件表达式(check短语)
参照完整性
实体完整性(primary key)
数据库完整性
域(列)完整性
字段属性的约束
值域、类型、有效规则
实体(行)完整性
记录唯一性,也就是主键的约束
体完整性是指关系中的主属性值不能为Null且不能有相同值
参照完整性
表间数据参照引用的约束,也就是对外键的约束
外键必须是另一个关系的主键有效值
数据库三级模式
提高了数据库的逻辑独立性和物理独立性。
不同级别的用户对数据库形成不同的视图
外模式
用户级对应外模式
子模式或用户模式
与某一应用有关的数据的逻辑表示
DML对这些数据记录进行
外模式是从模式导出的一个子集
模式中允许特定用户使用的那部分数据
模式
概念级对应模式
模式又称概念模式或逻辑模式
建立数据的逻辑结构
全局逻辑结构总体描述
DDL来描述
内模式
物理级对应内模式,
存储模式
中全体数据的内部表示或底层描述
数据在存储介质上的存储方式和物理结构
外模式一模式映射
模式一内模式映射
http://www.cnblogs.com/kunpengit/archive/2013/03/14/2959088.html
事务
特性
原子性
数据修改,要么全都执行,要么全都不执行
一致性
数据都保持一致状
隔离性
并发事务所做的修改必须与任何其他并发事务所做的修改隔离
持久性
系统的影响是永久性的
完整的事务
设置事务的起始点
提交事务,使事务提交的数据成为持久,不可更改的部分
撤消一个事务,使之成为事务开始前的状态
建立一个标签,做为部分回滚时使用,使之恢复到标签初的状态.
锁
数据库引擎用来同步多个用户同时对同一个数据块的访问的一种机制
事务获取数据块当前状态的依赖关系
必须保护自己不受其他事务对同一数据进行修改的影响
事务通过请求锁定数据块来达到此目的
锁的模式
定义了事务对数据所拥有的依赖关系级别
共享或独占
共享锁
共享锁(S 锁)
资源上存在共享锁(S锁)时,其他事务都不能修改数据
读取操作一完成,就立即释放资源上的共享锁(S锁)
:在非Serializable隔离级别做查询不加任何锁,而在 Serializable隔离级别下做的查询加共享锁,
共享锁的特点:共享锁和共享锁可以共存,但是共享锁和排他锁不能共存
更新锁(U锁)
更新锁在共享锁和排他锁的杂交
这里面有两个步骤:
1) 扫描获取Where条件时。这部分是一个更新查询,此时是一个更新锁。
2) 如果将执行写入更新。此时该锁升级到排他锁。否则,该锁转变成共享锁。
更新锁可以防止常见的死锁。
排他锁
排他锁(X 锁)
防止并发事务对资源进行访问
排他锁不与其他任何锁兼容。
使用排他锁(X锁)时,任何其他事务都无法修改数据
所有隔离级别下进行增删改的操作都会加排他锁,
排他锁的特点:和任意其他锁都不能共存
四大冲突问题
脏读
某个事务读取的数据是另一个事务正在处理的数据
另一个事务可能会回滚,造成第一个事务读取的数据是错误的。
不可重复读
一个事务里两次读入数据
另一个事务已经更改了第一个事务涉及到的数据
第一个事务读入旧数据。
幻读
事务不是独立执行时发生的一种现象
更新丢失
多个事务同时读取某一数据,一个事务成功处理好了数据,被另一个事务写回原值,造成第一个事务更新丢失。
悲观锁
假设并发更新冲突会发
锁住读取的记录,防止其它事务读取和更新这些记录
其它事务会一直阻塞,直到这个事务结束.
悲观锁是在使用了数据库的事务隔离功能的基础上,独享占用的资源,以此保证读取数据一致性,避免修改丢失
乐观锁
乐观锁不会锁住任何东西
不依赖数据库的事务机制,
乐观锁完全是应用系统层面的东西
使用乐观锁,那么数据库就必须加版本字段
死锁
事务A相依于事务B,并且事务B也因为相依于事务A 而封闭了这个循环
解决
SQL Server遇到死锁时会自动杀死其中一个事务
而另一个事务会正常结束(提交或回滚)
如何避免死锁
- 按同一顺序访问对象。(注:避免出现循环)
- 避免事务中的用户交互。(注:减少持有资源的时间,较少锁竞争)
- .使用较低的隔离级别
- .使用基于行版本控制的隔离级别
- 使用绑定连接
日志文件
用于数据库恢复
SQL通配符
%:模糊匹配一个或多个字符
_:占位符,匹配任意一个字符
[]:目标匹配字符:匹配单个字符,若写了多个,匹配任一
[^]:目标匹配字符,[]相反。
关系模型
用二维表的形式表示实体和实体间联系的数据模型
字段称为属性,字段值称为属性值,
记录类型称为关系模型。
关系模式名是R。记录称为元组,元组的集合称为关系或实例。
关系中属性的个数称为“元数”,元组的个数称为“基数”。
有时也称关系为表格,元组为行,属性为列。
ER模型
基本元素
实体
ER模型中的实体往往是指实体集–》实体集:指同一类实体构成的集合
联系
一个或多个实体之间的关联关系
属性
ER图转换成关系模式集的算法
逻辑设计阶段
http://blog.youkuaiyun.com/haovip123/article/details/21708041
SQL语句的操作步骤
先解析编译后,处理优化,最后执行返回结果
SQL约束
.—-主键约束(Primay Key Coustraint) 唯一性,非空性
2.—-唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个
3.—-检查约束 (Check Counstraint) 对该列数据的范围、格式的限制(如:年龄、性别等)
4.—-默认约束 (Default Counstraint) 该数据的默认值
5.—-外键约束 (Foreign Key Counstraint) 需要建立两表间的关系并引用主表的列
数据库技术
数据库技术的根本目标是要解决数据共享的问题
数据库是一个运行在操作系统上的软件
B选项 数据库设计指的是数据库中数据表以及表之间怎么样去设计的问题,说白了就是建模。
C选项 数据库就是保存起来数据,然后再别的需要使用的地方去使用
D选项 逻辑结构可能是连续的,但是在存储的物理结构上并不要求完全连续
主索引和候选索引
主索引和候选索引均不允许有重复值,且主索引只能有一个,候选索引可以有多个。
封锁机制
数据库加锁主要就是解决线程争抢资源的问题,即并发控制问题