第一章小结:
数据库是一种按特定数据模型组织、存储和管理数据的文件
 数据模型是描述数据、数据间关系及其约束的形式描述
 关系模型是目前大多数数据库采用的数据模型
 数据库系统:由用户、数据库应用程序、DBMS、数据库组成 
DBMS是一类用于创建、操纵和管理数据库的系统软件 
DBMS有多种类型、多种功能 
数据库应用系统与其它软件系统一样,分多个阶段完成开发 
个人数据库系统与企业级数据库系统分别面向不同场合 
数据库应用结构:集中式结构、客户/服务器结构、分布式结构
 Access软件既是一个桌面数据库管理系统,又是一个应用工具
 
第二章小结
问题:什么是关系数据库?
采用关系数据模型组织、存储和管理数据的数据库。
行:元组 列:属性 关系:表
可以把主键看作一个固定了的候选键(主键非空,外键非空)
代理键是自动生成的数字序列,代替复合主键
参照完整性就是指两个表的主键取值要对应外键。但列名不一定要一致。
对关系数据模型的描述:
三个方面:
    数据结构:二维表
    数据操作:基于关系代数的数据集合操作
    数据约束:
实体完整性约束
参照完整性约束
用户自定义约束
函数依赖:属性依赖于主键        写作:主键->(属性)
在一个表中存在多组函数依赖,则说明关系不规范,拆分成只有一组函数依赖的关系表
 
 
第三章小结
列约束字句
    check的用法
        check(属性 in (’a’,’b’)),在这两个里面选一个有效
    unique 值唯一
    default缺省 default’a’,
表约束
    主键:constraint x_pk primary key(a,b),(可用列约束可用表约束)
    代理键:identity (m,n) m是初值,n是增量
    外键:只能用表约束。constraint a_fk foreign key(a)
    reference    另一个表表名(主键名)
    On update cascade
在有参照完整性约束的情况下删除表会报错
创建索引:create index a on表+列  作用:快速查询
数据操纵sql语句:
    插入:insert into table values(‘ ‘,'')
    修改:update table
         Set a(列名)=‘'
         Where b(主键名)=''
    删除:删除一行:delect from table
                 Where a=‘’,
    查询语句:
        select (可以打*号)
        from table
        where 条件 (where sth between a and b)(sth like %sth %指代任意字符,like是一种匹配)
            书上只有where用了and,其他地方并列都用逗号
        group by(having) 
        order by 列名 排序,默认升序,降序用desc,升序勇asc
        内置函数:count(*) as 名称 from
                Min(列名),max(列名)   //注意在后面用as给查询结果的列命名
                Len(列名),char字符的长度
        Group by类似于order by 是对查询结果的操作,它可以将查询结果按照属性分组,并在组内进行操作
        having 是表示限定条件  ,having 条件
        unique和distinct的区别,前者是表约束,后者是列约束
    group的理解:group一般和聚合函数一起用,group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面或者包含在having 后的聚合函数里。
       where和having 的区别,where是在分组前的筛选,having是在分组后的筛选。内置函数一般不放在where中。having限制的是组不是列(它的处理范围是在组间)
        多表关联查询:
            子查询: where 主键 in
                            (
                            Select 外键
                                Balabala
                             )
                
        连接查询:常用,注意在where中找到主键外键相等即可 善用as
        from a join b on 外键等于主键:就是连接查询中把from和where合用
        外连接查询:当查询结果不匹配的时候,想要输出不匹配的内容,就要用到外连接。因为以上的方法都是在匹配的前提下得到的。
            Left/right/full join on(就是正常的join函数加一个前缀)
创建视图:create view as
本章细节:sql语言类型:
            数据  定义/操作/查询/控制
 
第四章小结
        e-r实体关系类型:
         | 表示强制 。
        表示可选  单线表示最小0最大1,多线表示最小0最大n,但是强制类型最小为1。
        继承关系:完整继承(子类包含父类的所有情况),比继承多一个横线,非完整继承又有横线又有叉
                       存在一个箭头指向父类
        互斥关系:子类互不兼容。 图中有一个叉
第五章:
          数据库模型:概念数据模型;逻辑数据模型;物理数据模型;
          标识符是逻辑概念,主键是物理概念
          实体类型:强实体。  弱实体:依赖其他实体才能存在
          如果弱实体属性中存在依赖实体的标识符的属性,就是id依赖。在图中需要画一个三角形,三角形的顶点指向强实体。
     删除强实体之前要先删除所有依赖的弱实体
概念数据模型的设计:
    自顶向下/自底向上/自内而外 /混合策略
逻辑模型到物理模型的转换:
        非id依赖:主键还是弱实体的标识符不变, 但把强实体的标识符放入弱实体作为属性之一
        ID依赖:强实体标识符放入后和弱实体的标识符一起构成复合主键
        1:1关系的转换:主键外键不区分
        1:n关系:将1代表的实体的标识符放入n代表的实体。但是不构成复合主键(主键不变)
    M:n关系:需要中间关联表:包含之前两表的所有标识符并作复合主键
继承关系的转换:
        父表中的主键放入子表,做主键和外键
函数依赖:
        形式:决定因子->依赖函数
        类型:
            完全/部分/传递/多值%函数依赖
                部分:复合主键中,属性只依赖于主键的一部分
                多值:非主属性互相之间都依赖
                传递:x->y,y->z
关系式不规范的原因:
    存在多个函数依赖关系
关系规范化范式:六种
    第一范式:属性不可再分
    第二:消除部分依赖
    第三:消除传递
    巴斯德范式:所有函数依赖的决定因子都是候选键(决定因子要唯一)
    第四范式:茶消除多值依赖             
规范化程度过高:造成数据库性能下降。
    反规范化:降低规范化程度:合并表
 
第六章重点
事务:概念:单个业务处理单元的一组数据库访问操作
        (默认一句sql语句为一个事务)
         性质:要么成功要么失败,不能部分
                  是dbms执行任务的最小单元/最小并发控制/最小故障恢复,可推上面
         特性:asid
                    原子性:不可分->要么成功要么失败
                    一致性:多次结果一致
                    隔离性:不相互影响
                    数据的改变是永久的
事务sql语言:
        开始:begin transaction
        回滚:rollback
        提交:commit
        数据保存:save transaction
事务编程:
            Begin 
            数据操作/查询语言
            if error
            Rollback
            Commit
               事务编程中不能对数据库进行操作,可以对数据进行操作
并发控制:防止数据不一致/死锁
 
数据故障分类:
        不可重复读:两次读的过程中,另一个线程对数据的修改
        脏读:  回滚过程中另一个线程对数据的读取
        幻想读://类似不可重复读
        丢失更新:两个数据修改进程交叉进行,其中一个做无用功
解决方法:并发事务调度:
        要想解决问题->调度顺序:可串行化调度
    具体方案:
        事务锁:
        二阶段锁定协议:事务分两阶段:
                 增长:只能获得锁,不能释放
                 缩减:释放锁,不能获得
                 二阶段锁定就能保证串行化
锁:
    锁的分类: 
        排它锁:锁定后不允许读写(也不能允许别的进程对它加锁)
        共享锁:锁定后不允许写,可以读
    资源锁定粒度:
        粒度:数据的粗放程度
        从数据库到元组,粒度越来越小        
加锁协议
        一级加锁协议:修改共享数据之前加排它锁,事务结束后释放         问题:不可重复读 脏读
        二级加锁协议:一级基础上,针对读操作,加共享锁,读完就释放   问题:不可重复读
        三级加锁协议:与二级不同的是事务结束后才释放共享锁
死锁:两个进程都在等待对方进行。宕机
        死锁的解决方法:回滚一个操作
数据库备份与恢复
        恢复:从备份副本中恢复
        备份方式:    
            备份文件恢复:
            事务日志回滚:
 
第七章重点
数据库应用程序结构
          表现层
          业务逻辑层
          数据访问层
    数据库应用程序的开发
        软件
        数据库
数据库连接技术
        Odbc        微软对数据库访问的一组api
        Jdbc        java API:建立与数据库的连接 发送sql语句 处理结果
        Esql         嵌入式sql,把sql嵌入到宿主语言中
Web数据库系统
        asp.net
        Jsp
游标编程
        游标是从结果集中每次提取一条记录的方法
存储过程:
        类似于脚本
        Create procedure a
                A char(10)
                B varchar(20)        output
          As 
        Select b from ~~~
        Where a=~~~
 
触发器
        特殊的存储过程:触发之后自动执行
        当数据操作语句对特定表的数据进行操作的时候得到触发,保证对数据的处理符合语句定义的规则
                即实现参照完整性和数据一致性
         触发器性能一般较低        
触发器的组成:
        事件
        条件
        动作
        Create trigger A
        On table1 
        For    update 
        as
            If update(STUDENTid)
        Begin
            Update table2
                Set a.studentid=b.studentid
                From table1 as a,table2 as b
                Where a.x=b.x