01 第一,什么是数据库?
维基百科上是这样定义的:
所谓“数据库”是以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。一个数据库由多个表空间(Tablespace)构成。
数据库就是一个存储结构化数据的仓库。
02 第二,数据库管理系统
数据库管理系统(Database Management System,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。
数据库管理系统主要分为以下两类:
2.1 关系数据库
关系数据库是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。
几乎所有的数据库管理系统都配备了一个开放式数据库连接(ODBC)驱动程序,令各个数据库之间得以互相集成。
典型代表有:MySQL、Oracle、Microsoft SQL Server、Access、PostgreSQL、DB2、MariaDB
2.2 非关系型数据库 NoSQL
非关系型数据库也被称为 NoSQL 数据库,NoSQL 并不是某个具体数据库,它泛指所有非关系型数据库。
非关系型数据库种类有很多,我们列举其中较为流行的几种。
2.2.1、键值(Key-Value)存储数据库
键值数据库主要是使用一个哈希表,表中有一个特定的键和一个指针指向特定的数据。Key/value 模型的键值数据库的优势在于,通过键的 hash 码可以快速查询到 value,并且能够应对高并发。
市面上成熟的产品有,Memcached、Redis、MemcacheDB、Berkeley DB。前两个可能比较有名,做缓存的数据库。
2.2.2、列存储(Column-oriented)数据库
列存储数据库又被称为面向可扩展性的分布式数据库,它反转了传统的行存储数据库。
先看一个普通表结构,表student
因为是以列字段作为作为表格的行,那么同一行记录取的就是该表中所有记录的的某一个列数据集合,必然是同一类型的数据,要么都是 int 类型,要么都是 varchar 类型。
行存储如果要取表中某一列的所有数据集合,就会复杂的多,所以在大部分场景下,列存储的解析过程更有利于分析大数据的数据分析。
当然了,这只是其中一个区别,他们之间的优劣对比有很多个方面,这里不可能都进行列举,你们可以自行去搜索了解。
最典型的产品应用就是,Hbase,大数据存储用的非常多。
2.2.3、面向文档数据库
文档数据库是一种非关系数据库,旨在将半结构化数据存储为文档,其中文档包括 XML、YAML、JSON、BSON、office 文档等。
简而言之,就是将数据保存到以上类似格式的文档中,数据库中的每个记录都是以文档形式存在的,相互之间不再存在关联关系。
典型的应用就是,MongoDB、CouchDB。
03 第三,数据库架构
数据库的架构可以大致区分为三个概括层次:内层、概念层和外层。
内层:最接近实际存储体,亦即有关数据的实际存储方式。
外层:最接近用户,即有关个别用户观看数据的方式。
概念层:介于两者之间的间接层
04 第四,SQL简介
1,SQL
SQL(Structured Query Language 结构化查询语句)是一种特定目的程序语言,用于管理关系数据库管理系统(RDBMS),或在关系流数据管理系统(RDSMS)中进行流处理。
SQL基于关系代数和元组关系演算,包括一个数据定义语言和数据操纵语言。SQL的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。
2,SQL语法简介
2.1 运算符
2.2 查询
SQL中最常见的操作是查询,它是通过陈述性SELECT语句执行的。SELECT从一个或多个表或表达式中检索数据。
SELECT是最复杂的SQL语句,可选的关键词和子句包括:
select * from student where id=1;
查询可以嵌套,以便一个查询的结果可以通过关系运算符或聚合函数在另一个查询中使用。嵌套查询也称为子查询:
select * from student where id in (select id from student where age<23);
2.3 空值与三值逻辑
SQL中引入了空值的概念,用来处理关系模型中缺少信息的情况。NULL一词表示空白值,是SQL中的保留词。如果Null进行比较,例如在WHERE子句中使用“=”判断相等,那么会返回未知值,而SELECT语句只会返回WHERE子句条件为真(TRUE)的结果,不会返回条件为假(FALSE)或未知的结果。
“真”、“假”以及与空值直接比较时所得到的“未知”共同组成了SQL的three-valued logic 三值逻辑
由于直接与空值比较会返回未知,因此SQL又提供了两个用于测试空值的语句:IS NULL和IS NOT NULL
2.4 数据类型
一张表中的每个字段都要定义该字段的类型。ANSI SQL包括下列数据类型:
2.5 数据定义
数据定义语言(DDL)管理表和索引结构。DDL的最基本是CREATE、ALTER、RENAME、DROP和TRUNCATE语句:
CREATE在数据库中创建一个对象(例如一张表)
create table teacher(id int,name varchar(50),primary key id);
ALTER以不同方式修改现有对象的结构,例如向现有的表或约束添加字段:
alter table teacher add age int not null;
TRUNCATE以一种非常快速的方式删除表中的所有数据,删除表内的数据而不是表本身
truncate table teacher;
DROP删除数据库中的对象,通常无法挽回的,即,它不能被回滚
drop table teacher;
2.6 数据操作
数据操纵语言(DML)是SQL用于添加、更新和删除数据的子集:
INSERT添加行(正式名称为元组)到一个现有的表
insert into teacher(id,name,age) values(1,'张老师',32);
UPDATE修改现有的表中一些行
update teacher set id=33 where id=1;
DELETE从表中删除现有的行
delete from teacher where age>60;
2.7 数据控制
数据控制语言 (Data Control Language, DCL) 授权的用户访问和操作的数据。它的两个主要的语句是:
GRANT:授权的一个或多个用户执行在一个对象上的一个操作或者一组操作。
REVOKE:消除了授权,其可以是默认的授权。
grant select on teacher to xiaoming;
revoke select on teacher from xiaoming;