数据库概述(2)

课程主页:Guoliang Li @ Tsinghua

接下来我们围绕这个框架从上至下简单介绍:昨天已经大概讲过数据库应用系统(开发的应用)、查询接口层、数据库(狭义),今天会介绍额外的内容。

一、查询接口层

SQL

用户通过专门的查询语言SQL(结构化查询语言)跟数据库"交流”,在用接口接入的同时可以进行数据的插入、更新、修改。贴个网址学习SQL:自学SQL网(教程 视频 练习全套)

--表示单行注释
--数据插入
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
--数据更新
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
/*也可以多行注释,像这样
数据修改、删除*/
ALTER TABLE table_name
ADD column_name datatype;
ALTER TABLE table_name
DROP COLUMN column_name;
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
DELETE FROM table_name WHERE condition;

查询接口

常用的查询接口除了JDBC、ODBC还有嵌入式SQL,即将SQL语句嵌入到高级语言(C、C++)中,在由高级语言编写的代码环境中就可以调用数据库。

二、数据库管理系统DBMS

(1)DBMS的定义

定义1可以参照昨天讲的(右边的图片——数据库在计算机系统中的位置)

定义2:即管理数据库的软件。

常用的数据库管理系统有:MySQL、PostgreSQL、Oracle Database

可以看到前面两个都是以SQL结尾,SQL专门用于像上面两种MySQL、PostgreSQL的关系型数据库(指通过表格的形式管理数据并用SQL来查询数据)比高级语言(C、C++)简单、容易学。

低时延是指查询数据和修改数据时间短,比如很短时间内(几毫秒)就能买到票。

(2)DBMS的核心功能

SQL有很多子集——DDL(数据定义语言)、DML(数据操纵语言)、DCL(数据控制语言)等。这些语言在管理数据的具体情况中使用——处理SQL语句的也叫SQL层,允许用户通过SQL层和数据库进行交互。

(3)DBMS概述

总体框架

SQL语句输入

假设我们在查询接口层输入这么一段SQL语句

SELECT s.name, c.name, sc.score --表示要查找学生的姓名、课程名、学生这门课程的成绩
FROM student AS s, course AS c, sc --从学生表(S)、课程表(C)、成绩表(sc)找
WHERE s.sno = sc.sno AND c.cno = sc.cno AND --满足学生表中的学生编号=成绩表中的学生编号、课程表中的课程编号==成绩表中的课程编号,从而找到成绩
      s.name = '赵宇' AND c.name = '数据库';--找学生姓名和课程名称

查询处理层

SQL语句进来后首先会到查询处理层,进行查询解析——将SQL语句解析成可以理解、优化、执行的结构化语句;查询重写——重写出等价的SQL语句,为了满足某一逻辑或者前提条件比如利于索引使用;

利于索引:将上面的SQL语句等价写成:

SELECT s.name, c.name, sc.score
FROM student AS s
JOIN sc ON s.sno = sc.sno --使用JOIN语句将表格之间的关联明晰出来
JOIN course AS c ON c.cno = sc.cno
WHERE s.name = '赵宇' AND c.name = '数据库';

查询优化——基数:原来的表格经过筛选、过滤之后(SQL)剩下的结果集,之后会生成多个查询计划;代价估计:不同的查询计划所耗费的计算机资源(CPU、内存等);计划选择:选择成本最小的计划

注:为什么cost(代价估计)不选择时间为衡量的标准?原因有:不同的硬件有不同的查询效率;某个表格存在访问限制后面虽解除了,但阻碍了对时间的估计。

查询执行层和存储管理层

经过查询处理层之后会产生一个物理执行计划,而真正的执行是在查询执行层,通过向存储层索要一些数据来执行计划,如何执行计划——用执行算子(看成为数据库打工的)对数据进行检索、过滤、排序、连接等,每个算子进行特定的操作。而不同的执行算子组合可以生成不同的执行模型

事务处理:是一系列对数据的操作,这些操作要么成功执行要么全都失败(比如银行转账,付款方账户和收款方的账户要同时发生变化,可以视为一个原子性变化,保证了数据的一致性)

三、数据库的基本特征

狭义的数据库是一堆数据,数据之间是有关联的,不是杂乱无章地存储,而是按一定的模型,并且会“变化”,不是像电话那样一成不变,而是可以增删改查、并且支持并发查询(并发指多个用户同时访问相同的数据,类似于多个用户同时查看同一张表格数据)

通用性:

假设你开了一家公司,设置了三个支撑公司运行的系统——财务系统、库存管理系统、客户管理系统。

每个系统可能会设立下面的表格:

财务管理系统:

用户表:记录交易用户的姓名、地址、联系方式

交易表:交易的ID、交易日期

产品表:交易产品的ID、数量、价格

库存管理系统:

用户表:在仓库出货时货物需要知道客户信息——姓名、地址、联系方式

产品表:仓库里的产品信息——ID、数量、价格(静态)

库存表:库存数量、出库时间、入库时间(动态)

客户管理系统:

用户表:客户的基本信息——姓名、地址、联系方式

交易表:客户在公司的购买记录、

可以看到会存在不同系统用到同一张表格的情况,难道每个系统都备份一份吗?显然没有必要。只需要一个数据库包含这些必要的表格,然后设立一个视图,视图里面包含系统所需的表格,并且有权限设置:比如库存表的访问权限只给库存管理系统,而用户表对三个系统都开放。

复制性:

数据可以进行复制备份,防止灾难性的事件发生。即使存储这一份数据的服务器所在的城市发生了地震,只要另外一个拥有相同数据的服务器所在的城市安然无恙便可无事。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值