数据库,简单来说可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。
数据库存储的基本对象是数据,数据可以是数字、文字、图片、音频、视频等等。
数据库的基本特征
数据按一定的数据模型组织、描述和储存
可为各种用户共享
冗余度较小
数据独立性较高,与应用程序互不依赖
易扩展
类型
关系数据库:MySQL、SQL Server、Oracle等
非关系型数据库(NoSQL):BigTable(Google)Cassandra、MongoDB等
键值(key-value)数据库:Apache Cassandra、Dynamo、LevelDB(Google)
数据抽象
数据库为屏蔽底层复杂性,采用了层次抽象,可以大致区分为三个概括层次:物理层、逻辑层、视图层。
物理层:最接近实际存储体,亦即有关数据的实际存储方式。
逻辑层:介于两者之间的间接层,描述数据怎么存储及数据间关系。
视图层:最接近用户,即有关用户观看数据的方式。一个逻辑层可以对应多个视图层。
vcq9oaPNqMvXtdi9ssr9vt3Eo9DNvs3Kx8/WyrXKwL3ntcTEo8TioaM8YnIgLz4NCqGhoaHK/b7dxKPQzb/Jsbu7rrfWzqrLxMDgOjxiciAvPg0KoaGhocq1zOUtwarPtcSj0M2jqGVudGl0eS1yZWxhdGlvbnNoaXAgbW9kZWyjqaGjz9bKtcrAvefTydK71+mzxtf3yrXM5bXEu/mxvrbUz/PS1Lyw1eLQqbbUz/O85LXEwarPtbm5s8mhozxiciAvPg0KoaGhobnYz7XEo9DNo6hyZWxhdGlvbmFsIG1vZGVso6mho7nYz7XEo9DN08Ox7bXEvK+6z8C0se3Kvsr9vt26zcr9vt285MGqz7Who8O/uPax7dPQtuC49sHQo6zDv8HQ09DOqNK7tcTB0MP7oaO52M+1xKPQzcrHu/nT2rzHwrzEo9DNtcTSu9bWoaO52M+1yv2+3cSj0M3Kx8q508PX7rnjt7q1xMr9vt3Eo9DNoaM8YnIgLz4NCqGhoaG7+dPattTP88r9vt3Eo9DNo6hvYmplY3QtYmFzZWQgZGF0YSBtb2RlbKOpoaPD5s/yttTP88r9vt3Eo9DNv8nS1L+0s8nKx0UtUsSj0M3U9rzTwcu34tewoaK3vbeoo6i6r8r9o6m6zbbUz/Ox6sq2tci4xcTuuvO1xMCp1bmhozxiciAvPg0KoaGhobDrveG5ubuvyv2+3cSj0M2jqHNlbWlzdHJ1Y3R1cmVkIGRhdGEgbW9kZWyjqaGjsOu94bm5u6/K/b7dxKPQzdTK0O3Ex9Cpz+DNrMDg0M21xMr9vt3P7rqs09Cyu82stcTK9NDUvK+1xMr9vt3LtcP3oaM8L3A+DQo8cD48c3Ryb25nPsr9vt2/4sv30v08L3N0cm9uZz48YnIgLz4NCqGhoaHK/b7dy/fS/bXEudvE7tPJwLTS0b7Do6zP8crH0ruxvsrpx7DD5ry40rO2vNPQxL/CvKOsxL/CvNKyy+PKx8v30v21xNK71tajrNa7ysfL/LXEt9bA4L3PueOjrMD9yOeztcXGoaLJ7bfd1qTX1rrFoaLM9cLrtcijrLa8ysfSu7j2y/fS/bXEusXC66OstbHO0sPHv7S1vbrFwuvKsaOsv8nS1LTTusXC69bQv7Sz9sbk1tC1xLbLxN+jrMj0ysfSqtXStcTIy6Gis7W78s7vxrejrNKy1rvSqszhuanP4LnYtcS6xcLro6y8tL/J0bjL2bLptb3V/ci3tcTIy8rCzu+hozwvcD4NCjxwPjxzdHJvbmc+yv2+3b/iudzA7c+1zbOjqERCTVOjqTwvc3Ryb25nPjxiciAvPg0KoaGhoc6709rTw7un0+uy2df3z7XNs9auvOS1xNK7suPK/b7dudzA7cjtvP6hozxiciAvPg0KoaGhoTxpbWcgYWx0PQ=="" src="https://www.cppentry.com/upload_files/article/57/1_0qvn0__.jpg" title="\" />
用途:
科学地组织和存储数据、高效地获取和维护数据
功能:
提供数据定义语言(DDL)
定义数据库中的数据对象
数据组织、存储和管理(安全性、完整性、并发性控制、恢复)
数据库操作:事务
事务(Transaction)是用于完成单一逻辑功能的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分区的工作单位。
为保证事务(transaction)是正确可靠的,事务的ACID特性:
1)原子性(Atomicity):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态(故障恢复)。
2)一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
3)隔离性(Isolation):当两个或者多个事务并发访问(此处访问指查询和修改的操作)数据库的同一数据时,一个事务不能让其他事务看到该事务的中间状态。
4)持久性(Durability):在事务完成以后,该事务对数据库所作的更改便持久地保存在数据库之中,并且是完全的。
看下面的例子:
韩梅梅给李雷转账,必须保障韩梅梅账户减去100时,在李雷账户增加100(原子性),如果服务器断电,从韩梅梅账户减去100后,, 李雷账户却没有增加100,要将整个事务进行回滚。
转账完成后,两人的账户和必须保持不变(一致性),不能破坏关系数据的完整性以及业务逻辑上的一致性。
其他事务,比如一个查询事务,不能查询到转账中间状态,比如韩梅梅账户减去100, 李雷账户却没有增加100的状态。(隔离性)
当转账成功后,即使机器故障,韩梅梅和李雷账户也保持转账后的金额(持久性)
让我们来看一下隔离性中的几个概念:
1)脏读(Dirty Reads):脏数据所指的就是未提交的数据。也就是说,一个事务正在对一条记录做修改,事务来读取其他事物更改却未提交的数据。
2)不可重复读(Non-Repeatable Reads):一个事务先后读取同一条记录,但两次读取的数据不同,我们称之为不可重复读。也就是说,这个事务在两次读取之间该数据被其它事务所修改。
3)幻读(Phantom Reads):一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为幻读。
隔离分为不同级别,包括:
读未提交(Re