什么是数据库
(1)数据库与信息管理
数据库是电子化信息的集合 将信息规范化并使之电子化,形成电子信息 ‘库’,以便利用计算机对这些信息进行快速 有效的存储、检索、统计与管理
(2)数据库与“表”
数据库起源于规范化“表(Table)”的处理
Table: 以按行按列形式组织及展现的数据
SQL语言概述
创建Table
create table简单语法形式:
Create table 表名( 列名 数据类型 [Primary key Primary key |Unique |Unique] [Not null] [, 列名 数据类型 [Not null] , … ]) ;
- “ [ ] ”表示其括起的内容可以省略,“ | ” 表示其隔开的两项可取其一
- Primary key: 主键约束。每个表只能创建一个主键约束。
- Unique: 唯一性约束(即候选键)。可以有多个唯一性约束。
- Not null: 非空约束。是指该列允许不允许有空值出现,如选择了Not null表 明该列不允许有空值出现。
- 语法中的数据类型在SQL标准中有定义
关系型数据库的不足
一致性带来的性能问题
鉴于一致性的种类很多,这里就说强一致性。为了提升数据库的性能,往往采用多线程进行实现。而为了保证强一致性,在读写操作里面就需要加锁。当然,最简单的方法是给整个数据库加一个互斥锁——这样正确性保证了,性能却不行了。于是就有考虑更细粒度的加锁。数据库中B+树如此重要,除了读写上有优势之外,更重要的原因是它加锁很方便——当然了,方便只是相对而言的,真正实现起来非常繁琐——如果你已经上了系统课就应该了解,一旦牵涉到锁,问题就多了:死锁、活锁、饥饿……这些都是需要考虑的问题
连接的开销
关系型数据库的核心就是连接,然而join本身是一个比较重的操作。如果你对数据库内部两个表怎么[join]不是很了解的话,你可以思考思考一下你会怎么去实现?
其实原理很简单,最最基本的就是,如果有索引可以用[hash join],没有index就只能两层for循环对两个表进行遍历了——当然,为了提高缓存命中率,有一个常见的优化技巧是分块for循环,但本质上还是两层for循环。
然而,由于关系型数据库本身的存储和索引方式,join操作的开销依然非常巨大。