Wilder's Blog.

每月一牛客——数据库篇(1)

字数统计: 2.5k阅读时长: 8 min
2018/07/24 Share

Sql 题目

2018-7-24

  • 数据库系统的特点

    • 共享性:因为数据是面向整体的,所以数据可以被多个用户、多个应用程序共享使用,可以大大减少数据冗余,节约存储空间,避免数据之间的不相容性与不一致性。
    • 独立性:数据独立性包括数据的物理独立性和逻辑独立性
      • 物理独立性:指数据在磁盘上的数据库中如何存储是由DBMS管理的,用户程序不需要了解,应用程序要处理的知识数据的逻辑结构,这样一来当数据的物理存储结构改变时,用户的程序不用改变。
      • 逻辑独立性:指用户的应用程序与数据库的逻辑结构是相互独立的,也就是说,数据的逻辑结构改变了,用户程序也可以不改变。
    • 结构化:数据库系统实现了整体数据的结构化,这是数据库最主要的特征之一。整体结构化是指在数据库中的数据不再仅针对某个应用,而是面向全组织;不仅数据内部是结构化,而且整体式结构化,数据之间有联系。

  • SQL语言具有两种使用方式,分别是交互式SQL和嵌入式SQL

    • 交互式SQL:在独立使用SQL语言进行数据库操作时,其使用方式称为交互式SQL。
    • 嵌入式SQL:当一个程序既要访问数据库,又要处理数据时,把SQL语言嵌入程序设计语言(也叫宿主语言)中,将SQL语言访问数据库的功能和宿主语言的数据处理能力相结合,是目前解决该问题的最有效途径。这样使用的SQL称为嵌入式SQL。
  • SQL语言中的操作命令

    • DML(data manipulation language)是数据库操纵语言:他们是 UPDATE、INSERT、DELETE,这4条命令是用来对数据库里的数据进行操作的语言。

    • DCL(data control language)是数据库控制语言:是用来设置或更改数据库用户或角色权限的语句,包括GRANT、DENY、REVOKE等语句。

      • GRANT 是授权语句
      1
      2
      3
      4
      USE database;
      GRANT CREATE TABLE TO user1;
      GO
      ---- 授予用户user1对database数据库创建表的权限
      • DENY 是禁止某一权限的语句
      1
      2
      3
      -----禁止member用户对数据表person的更新权限:
      DENY UPDATE ON person
      TO member CASCADE;
      • REVOKE是收回用户权限的语句
      1
      2
      3
      -----收回用户member对person表的删除权限:
      REVOKE DELETE ON person
      FROM member
    • DQL:数据查询语言

      DQL基本结构是由SELECT子句、FROM子句、WHERE子句组成的查询块

    • DDL:数据定义语言

      用来创建数据库中的各种对象——表、视图、索引、同义词、聚簇等:

      1
      CREATE TABLE/VIEW/INDEX/SYN/CLUSTER

  • 数据库中的参照完整性

    ​ 比如我们有两个表,一个表(department)存放的是部门的信息,例如部门id,部门名称等;另一个表是员工表(staff),员工表里面肯定要存放每个员工所在的部门。那问题来了,如果我们这个时候删除了部门表中的某条记录,在staff表中会发生什么?

    参照完整性:保证在一个关系中给定属性集上的取值也在另一个关系的特定属性集的取值中出现。这种情况称为参照完整性(referential integrity)

    ​ 也就是我们所说的外键(Foreign Key),当将外键指明为cascade时,则说明department表更新时对应的staff表也会进行相应的更新。当删除了部门表中的某一个字段时,staff表中对应的员工信息也会被删除。foreign key子句指明除了cascade以外的其他动作,如果约束被违反,可将参考与置为null(用set null代替 cascade),或者置为默认值(set default)。

    ​ 但是,一般来说,我们习惯的用法是,不允许删除。如果实在要删除,可以在被参照关系中加一个字段,来表明当前的记录被删除了,这样也方便日后查询等相关操作

  • 数据库系统必须提供的数据控制功能:安全性、完整性、并发控制

  • mysql 的主从复制

    ​ (1) master将数据改变记录到二进制日志(binary log)中,也即是配置文件log-bin指定的文件(这些记录叫做二进制日志事件,binary log events)

    ​ (2) slave将master的binary log events拷贝到它的中继日志(relay log)

    ​ (3) slave重做中继日志中的事件,将改变反映它自己的数据(数据重演)

2018-7-25

  • 事务的四大特性

    • 隔离性:一个事务内部的操作及使用的数据对并发的其他事务的隔离的
    • 持续性:事务一旦提交,对数据库的改变是永久的
    • 原子性:事务中包括的所有操作要么都做,要么都不做
    • 一致性:事务必须是使数据库从一个一致性状态变到另一个一致性状态
  • 数据库三个模式两个映像

    • 概念模式(conceptual schema)是数据库中全部数据的整体逻辑结构的描述。

      外模式(external schema)是用户与数据库系统的接口,是用户用到的那部分数据的描述。

      内模式(internal schema)是数据库在物理存储方面的描述,定义所有内部记录类型、索引和文件的组织方式,以及数据控制方面的细节。

    • 模式/内模式映象存在于概念级和内部级之间,用于定义概念模式和内模式之间的对应性。

      外模式/模式映象存在于外部级和概念级之间,用于定义外模式和概念模式之间的对应性。

  • 关系模型是将数据间的关系看成二维表

  • 1
    2
    SELECT COUNTDISTINCT 学号)
    FROM 成绩 WHERE 分数> 60

    可以看到两个关键字 COUNT 和 DISTINCT ,COUNT 是记录总数,DISTINCT 是选出不同的数据,所以COUNT 和 DISTINCT同时使用代表的就是计算出不同数据的数量。

  • 数据表的水平分割和垂直分割

    • 水平分割:根据一列或多列数据的值把数据行放到两个独立的表中

      水平分割通常在下面的情况下使用。
        •表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度。
        •表中的数据本来就有独立性,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用。
        •需要把数据存放到多个介质上。

      ​ 水平分割会给应用增加复杂度,它通常在查询时需要多个表名,查询所有数据需要union操作。在许多数据库应用中,这种复杂性会超过它带来的优点,因为只要索引关键字不大,则在索引用于查询时,表中增加两到三倍数据量,查询时也就增加读一个索引层的磁盘次数。

    • 垂直分割:把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中

      如果一个表中某些列常用,而另外一些列不常用,则可以采用垂直分割,另外垂直分割可以使得数据行变小,一个数据页就能存放更多的数据,在查询时就会减少I/O次数。其缺点是需要管理冗余列,查询所有数据需要join操作。

  • 对表进行垂直分割用的运算是投影、进行水平分割用的运算是选择

2018-7-29

  • 共享锁(S锁)又称读锁,读取操作创建的锁。其它用户可以并发读取数据,但任何事务都不能获取数据上的排它锁,直到已释放所有的共享锁。

    若事务T对数据对象A加上S锁,则事务T只能读A;其它事务只能再对A加上S锁而不能加X锁,知道T释放A上的S锁。这就保证了其它事务可以读A,但在T释放A上的锁之前不能对A做任何修改。

  • 排它锁(X锁)又称为写锁,若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能对A加任何类型的锁,直到T释放A上的锁。它防止任何其它事务获取资源上的锁,直到在事务的末尾将资源上的原始锁释放为止。

  • 数据库系统中的故障可以分为:事务故障、系统故障、介质故障

    • 事务故障:某个事务在运行过程中由于种种原因未运行至正常终止点,事务故障的常见原因,输入数据有误
      运算溢出,违反了某些完整性限制发生锁死。事务故障可以通过运行日志进行恢复。
    • 介质故障:指外存储设备故障,主要有磁盘损坏,磁头碰撞盘面,突然的强磁场干扰,数据传输部件出错,磁盘控制器出错等。这类故障将破坏数据库本身,影响到出故障前存储数据库的所有事务。
    • 系统故障:由于某种原因造成整个系统的正常运行突然停止,致使所有正在运行的事务都以非正常方式终止。
      发生系统故障时,内存中数据库缓冲区的信息全部丢失,但存储在外部存储设备上的数据未受影响 。
  • 运算的区分

    • 关系运算包括:选择、投影、连接以及除法
    • 集合运算是二目运算,包括并、差、交、广义笛卡尔积四种
CATALOG
  1. 1. Sql 题目
    1. 1.1. 2018-7-24
    2. 1.2. 2018-7-25
    3. 1.3. 2018-7-29