1.什么是数据库
所谓数据库(Database)就是数据(Data)的基地(Base)。
适合存储大规模数据的是关系型数据库(Relational Database)。在关系型数据库中,数据被拆分整理到多张表中,同时表与表之间的关系也可以被记录下来。
1970年美国IBM公司的Codd先生设计发明了关系型数据库。现在关系型数据库被广泛应用,以至于一提到数据库就默认是关系型数据库。
2.数据文件、DBMS和数据库应用程序
如图,数据库系统的构成要素包括“数据文件”“DBMS”“应用程序”三部分。数据库的实质虽然是某种数据文件,但是诸位编写的应用程序并不是直接去读写这些数据文件,而是以DBMS作为中介间接地读写。DBMS为
Database Management System,数据库管理系统。
数据库系统有如下几种:
3.索引
索引仅仅是提升数据检索和排序速度的内部机制。一旦在字段上设置了索引,DBMS就会自动为这个字段创建索引表。
索引表是一种数据结构,存储着字段的值以及字段所对应记录的位置。
索引表中的字段数更少,所以可以更快地进行数据的检索和排序。当查询数据时,DBMS先在索引表中进行数据的检索和排序,然后再根据位置信息从原来的数据表中把完整的记录取出来。索引所起的就是“目录”的作用。
也许会有人这样想,既然索引能够提升检索和排序的速度,那么在所有表的所有字段上都加上索引不就好了吗?实际上并不能这样做。因为一旦设置了索引,每次向表中插入数据时,DBMS都必须更新索引表。提升数据检索和排序速度的代价,就是插入或更新数据速度的降低。因此,只有对那些要频繁地进行检索和排序的字段,才需要设置索引。
4.SQL语句
为了对数据库进行增删改查操作,就必须从应用程序向DBMS发送命令。这里所使用的命令就是SQL语言(Structural Query Language,结构化查询语言)。
现在市面上几乎所有的DBMS都支持SQL语言。
5.事务处理
事务由若干条SQL语句构成,表示对数据库一系列相关操作的集合。
有一个经典的银行账户间汇款的例子可以用于说明其概念。为了从顾客A的账户中给顾客B的账户汇入1万元,就需要将以下两条SQL语句依次发送给DBMS:
- 把A的账户余额更新(UPDATE语句)为现有余额减去1万元;
- 把B的账户余额更新(UPDATE语句)为现有余额加上1万元。
此时这两条SQL语句就构成了一个事务。
假设在第一条SQL语句执行后,网络或计算机发生了故障,第二条SQL语句无法执行,那么会发生什么呢?A的账户余额虽然减少了1万元,但是B的账户余额却没有相应地增加1万元,这就导致了数据不一致。
为了防止出现这种问题,在SQL语言中设计了以下三条语句:
- BEGIN TRANSACTION(开启事务)语句,用于通知DBMS开启事务;
- COMMIT(提交事务)语句,用于通知DBMS提交事务;
- ROLL BACK(事务回滚)语句,用于在事务进行中发生问题时,把数据库中的数据恢复到事务开始前的状态。
6.说明
本文为《计算机是怎样跑起来的》读书笔记,如有错误,请兄弟们指正,大家一起进步!