数据库理论与应用
一、基本概念
1. 名词解释:数据库、数据库管理系统
- 数据库:根据某种数据模型进行组织,并存放到计算机存储设备的数据集合。笼统来讲,就是存放数据的仓库。
- 数据库管理系统:英文写作Database Management System(简称DBMS),是位于操作系统和用户之间的专门进行数据管理的软件系统。常见的DBMS: Oralce, MySQL, DB2, SQL Server, Informix。
2. 请描述数据管理的三个阶段及每阶段特点
1)人工管理阶段:计算机不通过数据管理;程序和数据是不可分割的整体;数据不能共享;不单独保存数据;
2)文件系统阶段:数据以文件形式持久保存在外部存储设备上
- 优点:程序和数据实现了分离;数据的逻辑结构和物理结构有了区别;文件的建立,数据增、删、改、查都要用程序来实现;
- 缺点:数据冗余;不一致性;数据联系弱。
3)数据库管理阶段:单独使用一套软件系统来存储、管理数据
- 优点:
数据独立性、可共享、低冗余
数据库系统提供了方便、友好的接口(用户接口、程序接口)
更强的安全性、可靠性
丰富的工具(如性能优化、备份/恢复、查询、权限管理) - 缺点:需付出额外的软件、硬件、人力成本
3. 名词解释:关系、关系数据库
- 关系:英文写作Relationship,由行、列组成的规范的二维表(每个属性不能重名、不可再分,关系中每一行次序不重要),行描述一个实体(事物)信息,列表示实体的属性。
- 关系数据库:是指使用关系(二维表)实体和实体间的联系的数据库管理系统。
4. 名词解释
- 实体(Entry):现实中可以区分的事物称为实体
- 元组(Tuple):表中的一行(也叫一条记录),表示一个实体
- 属性(Attribute):表中的一列,描述实体的一个数据值
- 键(Key):关系中唯一区分不同元组的属性或属性组合
- 主键(Primary Key):多个键中选取一个作为主键,从逻辑上唯一确定一个实体的依据
5. 什么是主键,主键有什么要求
主键(Primary Key)指从多个键中选取一个作为主键,从逻辑上唯一确定一个实体的依据,主键的要求是非空、唯一。
6. 什么是笛卡尔积
两个集合的乘积,表示用集合中的元素两两组合,产生的新集合
7. 什么是数据库约束,列举常见的约束
1)约束(constraint),是用来保证数据完整性、一致性、有效性的规则,可以限制无效的数据进入数据库中,从数据库层面上提供了"安检"。
2)常见约束
- 非空约束:字段的值不能为空
- 唯一约束:字段的值必须唯一
- 主键约束:字段作为主键,非空、唯一
- 默认约束:未填写值的情况下,自动填写默认值
- 自动增加:字段值自动增加
- 外键约束
8. 什么是数据库索引
索引是一种提高查询的技术,通过对数据表中一列或多列数据进行排序,在查询时避免全表扫描,从而提高查询效率。索引是一种单独存放的数据结构,包含着数据表中所有记录的引用指针,根据该指针能快速找到数据所存储的物理位置。
9. 什么是普通索引、唯一索引
- 普通索引:MySQL中索引的基本类型,允许在定义索引的列中插入空值、重复值
- 唯一索引:索引的值必须唯一,允许有空值
10. 什么是聚簇索引、非聚簇索引
- 聚簇索引:数据和索引(B+树)在一起,记录被真实地保存在索引的叶子中,索引键值的逻辑顺序与索引所服务的表中相应行的物理顺序相同
- 非聚簇索引:数据和索引分开存储
11. 说明适合及不适合使用索引的情况
1)适合使用索引的情况
- 在经常查询、排序、分组的列使用索引
- 数据分布相对均匀、连续的字段,适合使用索引
- 查询操作较多的表上,适合创建索引
2)不适合使用索引的情况
- 如果表的数据量很少,不建议使用索引
- 经常更新的表不宜使用过多索引
- 避免在取值范围很少的列上使用索引(例如性别,账户状态)
- 二进制字段不适合建索引
12.哪些SQL语句可能导致索引失效
- 未使用索引字段作条件
- 条件判断中使用了不等于(<>),会导致放弃使用索引进行全表扫描
- 条件判断中使用null值判断,会导致放弃使用索引进行全表扫描
- 模糊查询中,%前置会导致放弃使用索引进行全表扫描
- 对字段做运算,会导致放弃使用索引进行全表扫描
13. 什么是事务,事务的用是什么
1)事务(Transaction):指执行的一系列操作,要么全都执行,要么全都不执行
2)事务的作用:保证数据的正确性、一致性
14. 描述事物的ACID特性
- 原子性(Atomicity):一个事务是不可分割的整体,要么全都执行,要么全都不执行
- 一致性(Consistency):事务执行完成后,数据库从一个一致性状态变成另一个一致性状态
- 隔离性(Isolation):不同的事务不相互影响、干扰
- 持久性(Durability):一旦事务提交,对数据库的修改就必须永久保留下来
15. 事务对数据库性能有什么影响
事务会对数据进行过加锁,一个事务正在操作数据时候,另一个事务要操作相同的数据,则必须等待,等待上一个事务提交。所以,事务会降低数据库的增删改效率,换来的好处是保证了数据一致性。
16. 什么是视图,使用视图有什么好处
1)视图(View),是一个查看数据的窗口,本身不存放数据,它定义了一组查询规则,使用户可以查看到感兴趣的数据。
2)使用视图的好处
- 高效:复杂的连接查询,每次执行时效率比较低,可以考虑新建视图,每次从视图中获取,将会提高效率。
- 安全:有的数据是需要保密的,如果直接把表给出来进行操作会造成泄密,那么可以通过创建视图把相应视图的权限给出来即可保证数据的安全。
- 减少数据的重复存储。
3)如何创建视图
CREATE VIEW v_acct_name as
select acct_no, acct_name from acct;
17. 什么是锁,锁有哪些分类
1)锁是对数据的控制权,其作用是解决多个工作单元并发操作数据的问题
2)锁的分类
- 按粒度分:
- 行级锁(细粒度):锁定某一行,并发效率高,资源消耗多
- 表级锁(粗粒度):一次直接锁定整张表,并发效率低,资源消耗少
- 按类型
- 读锁(共享锁):select时候加锁,加锁之后可以读取,不能写
- 写锁(排它锁): insert/update/delete时候加锁,加锁之后不能读、写
18. 什么是短连接、长连接、连接池
1)短连接。短连接是指程序和数据库通信时需要建立连接,执行操作后,连接关闭。短连接简单来说就是每一次操作数据库,都要打开和关闭数据库连接,基本步骤是:连接→数据传输→关闭连接。
2)长连接是指程序之间的连接在建立之后,就一直打开,被后续程序重用。
3)事先建立一组连接,这一组连接被称为连接池。连接池将被所有连接的客户端共享使用,连接池可以加速连接,也可以减少数据库连接,降低数据库服务器的负载。
19. 什么是SQL语句执行计划
执行计划就是一系列的操作步骤。SQL是声明性语言,它只告诉数据库要查询什么,但并不告诉数据库如何去查。数据库所要做的就是基于算法和统计信息计算出一条最佳的访问路径。这个工作是由优化器来完成的。优化器会比较不同的执行计划,然后选择其中最优的一套。
20. 说明SQL语句执行过程
客户端(Clients)首先连接MySQL,然后发布查询,如果缓存(Query Cache)中有结果集,则直接返回结果集。如果结果没有被缓存,那么,MySQL解析查询(Parser)将通过优化器(Optimizer)生成执行计划,然后运行执行计划通过API(Pluggable Storage Engine API)从存储引擎获取数据,并返回给客户端。SQL语句执行时子句执行步骤如下所示:
- 第一步:首先执行from子句,从表中找到源数据
- 第二步:执行where子句,选出所有满足条件的数据
- 第三步:group by子句进行分组
- 第四步:聚合操作
- 第五步:having子句对聚合结果进行过滤
- 第六步:order by子句对结果进行排序
- 第七步:limit限制显示笔数
二、MySQL应用
1. 写出Linux下启动、停止、查看MySQL服务状态的命令
- 查看服务状态: /etc/init.d/mysql status
- 启动服务: /etc/init.d/mysql start
- 停止服务 : /etc/init.d/mysql stop