数据库(DB):组织,存储和管理数据的仓库
常见的数据模型:
关系数据库设计原则:
1.数据库内数据应获得最大限度的共享,最小的冗余,消除数据及数据依赖关系中的冗余部分。
2.保证数据与应用之间的独立性。
常见的概念:
1.表:表具有固定的列数和任意的行数,也称为关系,用于组织和存储数据。
2.字段:表中的每一列
3.元祖/记录:表中的一行
4.域:每个属性的范围
表中的列除了数据类型和大小属性之外,还有数据完整性和引用完整性
数据完整性:指列中每个事件都有正确的值
引用完整性:表之间关系的完整性
几种数据完整性机制:
(1)空值和非空值 (NULL,NOT NULL)
(2)默认值 (DEFAULT)
(3)特定标识属性:(IDENTITY)系统会自动为表中新行生成编号,因为标识通常唯一,因此常被定义成主键
注:一个列不能同时又NULL和IDENTITY属性
(4)约束:自动强制数据完整性。注意:约束优先于触发器,规则和默认值,而且处理速度快
非空(NULL NULL):输入不为空
检查(CHECK):保证一列(或一组列)中的数据满足一组指定的条件 (mysql好像不能用)
比如某列属性:number INT CHECK(number > 60)
ADD CONSTRAINT CHECK(aaa LIKE '[ABC]')
主键(PRIMARY KEY):用来保证一列(或一组列)中的值是唯一的,而且永不变:从不修改和更新,也不会分配相同的
外键(FOREIGN): 外键是表中的一列,其值必须列在另一表的主键中。用来保证引用完整性。在定义外键后,DBMS不允许删除在另一个表中具有关联行的行
可以使用REFERENCES关键字来设定
唯一性(UNIQUE):唯一约束用来保证一列(或一组列)中的数据是唯一的。
和主键的区别:
1>.表可包含多个唯一约束,但每个表只允许一个主键。
2>.唯一约束列可包含NULL值。
3>.唯一约束列可修改或更新。
4>.唯一约束列的值可重复使用。
5>.与主键不一样,唯一约束不能用来定义外键。
视图:视图是查询结果的虚拟表,只包含使用时动态检索数据的查询。
使用视图可以重用SQL语句,使用表的一部分而不是整个表,控制整个表中部分数据的控制权限。
存储过程:是预编译的SQL语句集合,执行存储过程时,存储过程内的操作也会被执行。
功能类似于函数,可以接受输入参数并以输出参数的格式向调用过程或批处理返回多个值。
优点:
可支持代码复用,更加安全,在传输执行的时候只需要传输一条执行代码语句。
存储过程比一般的SQL语句执行快,因为存储过程在创建时就已经被编译。
缺点:存储过程大多不可移植,因为不同数据库的语句不一样
触发器:触发器是一种特殊的存储过程,在特定的数据库发生活动是自动触发执行,并和单个表相关联。触发器不能主动调用也设置参数(感觉类似于触发中断)
触发器和约束可以强制执行业务规则和保证数据完整性。(优先使用约束)
3种常见类型的触发器:
DML:在指定表或视图中有INSERT,UPDATE,DELETE,SELECT等操作是触发
DDL:在响应数据定义语言是触发
登录触发器:登录时触发
优点:
可以实现比CHECK更复杂的操作,一个表可以存在多个触发器,触发器里可以调用其他过程。
常见用途:
检查数据是否符合要求并操作,保存日志
事务: 为完成业务而将批量的语句封装起来,使的SQL操作完全执行,或者完全不执行的方式来维护数据库的完整性。
如果没有错误则提交,如果有错误则会回滚,不会中途停止。
概念:
事务(transaction)指一组SQL语句
回退(rollback)指撤销指定SQL语句的过程
提交(commit)指将未存储的SQL语句结果写入数据库表
保留点(savepoint)指事务处理中设置的临时占位符(placeholder),可以对它发布回退(与回退整个事务处理不同)
显式事务:显示表用事务语法
隐式调用:一般的SQL语句,都是操作自动保存的
使用简单的ROLLBACK和COMMIT语句,就可以写入或撤销整个事务。支持回退部分事务需要在事务处理块中的合适位置放置占位符。
事务的并发主要体现在四个方面。
更新丢失:两个或多个事务更新同一行是,都是选择最初的行进行更新,会发生更新丢失的问题
脏读:一个事务读取了另一个事务没提交的更新,造成脏读
不可重复读:多个事务在访问一个数据,且每次对去的数据不同
幻读:和不可重复读类似,事务第一次读的行范围显示出其中一行不在后续读中,因为改行已被其他事务删除
合理使用锁可以在多用户情况下防止事务并发的问题:
锁具有属性模式:
共享锁:只读锁,允许多个并发事务读取其锁定的资源
更新锁:在修改操作的初始化阶段用来锁定被修改的资源
排它锁:为修改数据而保留的,不能读取和修改被锁定的资源
游标: 游标是一个存储在DBMS服务器上的数据库查询,是SELECT语句检索出来的结果集。
在检索出来的行中前进或后退一行或多行,主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。
游标使用步骤:
1.声明游标
2.打开游标
3.使用游标
4.关闭游标
关闭游标后可再次打开使用。
索引: 使用索引用来加快查找数据。索引包括从表或视图中的一个或多个列生成键,以及映射到指定数据的存储位置的指针。
一个表的存储有两部分组成,一部分用来放表的数据页,另一部分放索引页。
数据检索时,系统首先搜索索引,通过索引映射指针到具体数据。
索引的缺点:
索引数据可能要占用大量的存储空间。同时创建和维护需要时间较多,因此索引适合数据不经常改动的表
数据完整性:
域完整性:数据表中的列的完整性。要求数据表中指定列有正常的数据类型,格式和有效数据范围
常用机制:默认值,检查,外键,数据类型,规则
实体完整性:所有记录有唯一标识,确保数据表中数据的唯一
常用机制:唯一索引,主键,唯一码,标识列
引用完整性:(参照完整性)用来维护相关数据表中数据一致
常用机制:外键,检查,触发器,存储过程