8.1 数据库
8.1.1 关系型数据库和文件数据库系统的区别 1.关系型数据库主要特征是数据结构化,文件系统则是非结构化 2.关系数据库里的逻辑结构是二维表,文件系统中基本元素是文件。 3.文件数据库系统可以实现多媒体文件管理,支持C/S工作模式。 8.1.2 SQL基本功能 查询
8.1.1 关系型数据库和文件数据库系统的区别
1.关系型数据库主要特征是数据结构化,文件系统则是非结构化
2.关系数据库里的逻辑结构是二维表,文件系统中基本元素是文件。
3.文件数据库系统可以实现多媒体文件管理,支持C/S工作模式。
8.1.2 SQL基本功能
查询,数据操作,数据定义,数据控制。
查询:(DSL?)使用select语句。
数据操作:DML,主要包括:插入数据,修改数据,以及删除数据3种语句。
数据定义:DDL,可对数据库用户,基本表,视图,索引进行定义和撤销。
数据控制语句:DCL,进行统一的控制管理,保证数据在多用户共享下的情况下是安全的。
基本语句
DSL:select:选择符合条件的记录 ;select * from table where 语句
DML: insert:插入一条记录;insert into table(字段1,字段2,...)values(值1,值2)
update:更新语句 :update table set 字段=value where 表达式
delete:删除记录;Delete from table where 条件表达式
DDL:create 数据表的建立;create table tablename(字段1,字段2...)
drop;数据表的删除;drop table tablename
DCL:grant 为用户授予系统权限
revoke:收回系统权限;
8.1.3 内连接和外连接
内连接也叫自然连接,只有两个表相匹配的数据才能在结果集中出现,返回的结果集是两个表中所有匹配的数据,舍弃不匹配的数据。从结果集中,删除与其他连接
表中的没有匹配行的所有行。
select fieldlist from table1 inner join table2 on table1.column=table2.column
外连接则会多包含非匹配数据,分为左外连接,右外连接,全外连接,LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN;
8.1.4 事务
事务是数据库中的单独 执行单元,它通常由高级数据库操作语言SQL,或者编程语言C++, java写的用户程序的执行所引起。当在数据库中更改数据成功时,在事务中
更改的数据便会提交,不在改变,否则,事务进行回滚或取消,更改无效。
事务的4个特性:ACID
A:原子性:不允许事务部分执行,要么全执行,要么全不执行。
C:一致性:事务执行前后的数据库数据必须保持一致的状态,满足模式所指定的约束。
I:隔离性:多个事务并发执行,为了保证数据的安全性,将一个事务内部的操作与事务的操作隔离出来,不被其他事务所见。有4种类型的事务隔离级别:不提交的读,提交的读,可重复的读和串行化。
D:永久性:DBMS保证事务完成后,数据的修改是永久的,当系统或介质出现问题,该修改液保存。通过数据库的备份和恢复完成的。
COMMIT和ROLLBACK,完成和回滚。
8.1.5存储过程。
SQL语句是先编译后执行,为了提高效率,将一些完成特定功能的SQL语句集编译后存储在数据库服务器中,用户通过制定的名字调用执行。
create procedure sp_name @[参数名][类型]
as
begin
...
end
调用:exec sp_name[参数名]
删除存储过程:drop procedure sp_name
使用存储过程可以增强SQL的灵活性,用流程控制语句编写存储过程,有很强的灵活性,可以完成复杂的判断和运算。也可以保证数据的安全和完整。
没有权限的用户也可以在这种方式下间接的存取数据库,比较安全。
本质上和函数没有区别,但具体而言的区别:
1.存储过程一般是作为独立的部分来执行的,
2.存储过程实现的功能较为复杂,函数实现的功能针对性强。
3.函数需要括号包住输入的参数,而且只能返回一个值或表对象,存储过程可以返回多个参数。
4.函数可以嵌套在SQL语句中使用,可以在select中调用,存储过程不行。
5.函数不能操作实体表,只能操作内建表
6.存储过程在创建的时候被编译存储在服务器,执行更快。
8.1.6主键和外键
主键不能为空,只能有一个主键,可唯一识别一行,主键不一定为单列,可以是多个属性。
外键是指本表受到其他表的约束,本表的外键是其他表的主键。外键可以有多个,也可以为空。
保持数据的一致性,参照完整性。
8.1.7 死锁
由于程序并发执行,不断申请和释放内存,在争夺资源时 进入无限等待的过程,为死锁。
形成死锁的必要条件:
1.互斥:每个资源每次只能被一个进程所使用。
2.请求与保持等待,一个进程因请求资源被阻塞时,对已获取的资源保持不放。
3.不可褫夺:进程已获取的资源,在未释放前,不能剥夺。
4.环路等待;等待出现环路时已死锁。
8.1.8 共享锁和互斥锁
锁是一种对数据的保护机制。
共享锁是S锁,即用于不更改或不更新数据的操作。如select语句,事务对数据加S锁后,其他事务只能加S锁,不能加T锁
互斥锁是X锁,用于数据更改的操作,如insert,update,或delete,保证在任意时刻,只有一个进程访问对象。加了X锁,则其他任务事务不得加任何锁。
注意:先锁后再操作,使用完要解锁。
8.1.9 一二三四范式
范化:是在识别数据库中的数据元素,关系,以及定义这些表之后的细化工作。
1NF:数据库中每一列都是不可分割的基本数据项。同一列中不能有多个值,某个属性不能有多个值,或者有多个重复属性。如果出现重复属性,需将重复属性新建一个实体,新实体和原实体间是一对多的关系。要求属性不能被分割,即不能是属性的组合。
2NF:在1NF的基础下,要求每个实例或行可以被唯一的区分,R中每个非主属性完全依赖于某个候选键,则为2NF。如果有非主属性对候选键部分依赖,则应建立新表,使用外键约束。在需要的时候进行连接。
3NF:即第三范式是要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。 满足第三范式(3NF)必须先满足第二范式(2NF)。3NF是消除了2NF中的传递依赖,比如学生表(学号,姓名,系号,系名)因为学号->系号,而系号->系名,所以这里系名传递依赖与学号,变为3NF如下学生表(学号,姓名,系号) 系(系号,系名)
BCNF:3NF为基础,每个属性不传递依赖于R的候选键。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。
有个详解的写的不错:http://jacki6.iteye.com/blog/774866
http://www.2cto.com/database/201404/290140.html
8.1.10 写一个SQL语句,取出表的21-30条记录,(sql server,以自动增长的id作为主键,id可能不连续)
方法1:Select Top 10* From S Where ID>( Select MAX(ID) from(Select Top 20 ID From S)as S)
方法2:Select Top 10* From S where ID NOT IN(select Top 20 ID From S)
8.1.11check约束
CHECK(约束表达式)对于数值的或数据格式的限制。
8.1.12视图
视图是虚表,只显示我们关心的内容,是选取出来的逻辑窗口。数据库中存在的是视图的定义,不存在视图包含的数据。这些数据还在原来的基本表中。
可以简化查询语句,但是不能提高查询效率。
上一篇: 浏览器中url存储的JavaScript实现_基础知识
下一篇: PHP新手上路