

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;
