數(shù)據(jù)庫分類:
關(guān)系型數(shù)據(jù)庫
關(guān)系數(shù)據(jù)庫,是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,借助于集合代數(shù)等數(shù)學(xué)概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù)。現(xiàn)實(shí)世界中的各種實(shí)體以及實(shí)體之間的各種聯(lián)系均用關(guān)系模型來表示。標(biāo)準(zhǔn)數(shù)據(jù)查詢語言SQL就是一種基于關(guān)系數(shù)據(jù)庫的語言楼吃,這種語言執(zhí)行對關(guān)系數(shù)據(jù)庫中數(shù)據(jù)的檢索和操作。 關(guān)系模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合孩锡、關(guān)系完整性約束三部分組成酷宵。
目前主流的關(guān)系型數(shù)據(jù)庫有Oracle,Mysql躬窜,SqlServer
非關(guān)系型數(shù)據(jù)庫
NoSQL浇垦,泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起荣挨,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站男韧,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題默垄,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展此虑。NoSQL數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重?cái)?shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題口锭。
NoSQL數(shù)據(jù)庫分類
鍵值(Key-Value)存儲數(shù)據(jù)庫
這一類數(shù)據(jù)庫主要會使用到一個哈希表朦前,這個表中有一個特定的鍵和一個指針指向特定的數(shù)據(jù)。Key/value模型對于IT系統(tǒng)來說的優(yōu)勢在于簡單鹃操、易部署韭寸。但是如果DBA只對部分值進(jìn)行查詢或更新的時候,Key/value就顯得效率低下了组民。[3]? 舉例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
列存儲數(shù)據(jù)庫棒仍。
這部分?jǐn)?shù)據(jù)庫通常是用來應(yīng)對分布式存儲的海量數(shù)據(jù)。鍵仍然存在臭胜,但是它們的特點(diǎn)是指向了多個列。這些列是由列家族來安排的癞尚。如:Cassandra, HBase, Riak.
文檔型數(shù)據(jù)庫
文檔型數(shù)據(jù)庫的靈感是來自于Lotus Notes辦公軟件的耸三,而且它同第一種鍵值存儲相類似。該類型的數(shù)據(jù)模型是版本化的文檔浇揩,半結(jié)構(gòu)化的文檔以特定的格式存儲仪壮,比如JSON。文檔型數(shù)據(jù)庫可 以看作是鍵值數(shù)據(jù)庫的升級版胳徽,允許之間嵌套鍵值积锅。而且文檔型數(shù)據(jù)庫比鍵值數(shù)據(jù)庫的查詢效率更高。如:CouchDB, MongoDb. 國內(nèi)也有文檔型數(shù)據(jù)庫SequoiaDB养盗,已經(jīng)開源缚陷。
圖形(Graph)數(shù)據(jù)庫
圖形結(jié)構(gòu)的數(shù)據(jù)庫同其他行列以及剛性結(jié)構(gòu)的SQL數(shù)據(jù)庫不同,它是使用靈活的圖形模型往核,并且能夠擴(kuò)展到多個服務(wù)器上箫爷。NoSQL數(shù)據(jù)庫沒有標(biāo)準(zhǔn)的查詢語言(SQL),因此進(jìn)行數(shù)據(jù)庫查詢需要制定數(shù)據(jù)模型。許多NoSQL數(shù)據(jù)庫都有REST式的數(shù)據(jù)接口或者查詢API虎锚。[2]? 如:Neo4J, InfoGrid, Infinite Graph.
NoSQL數(shù)據(jù)庫的使用場景
NoSQL數(shù)據(jù)庫在以下的這幾種情況下比較適用:1硫痰、數(shù)據(jù)模型比較簡單;2窜护、需要靈活性更強(qiáng)的IT系統(tǒng)效斑;3、對數(shù)據(jù)庫性能要求較高柱徙;4缓屠、不需要高度的數(shù)據(jù)一致性;5坐搔、對于給定key藏研,比較容易映射復(fù)雜值的環(huán)境。
SQL語句
SQL(structed query language) 結(jié)構(gòu)化的查詢語言:
DDL(Data Definition Language) 數(shù)據(jù)定義語言概行,命令:CREATE, DROP,ALTER 等
DML(Data Manipulation Language) 數(shù)據(jù)操縱語言蠢挡,命令:INSERT、UPDATE凳忙、DELETE
DQL(Data Query Language) 數(shù)據(jù)查詢語言业踏,命令:SELECT
CRUD操作,指在做計(jì)算處理時的增加(Create)涧卵、查詢(Retrieve)勤家、更新(Update)和刪除(Delete)
DDL是針對數(shù)據(jù)庫和表結(jié)構(gòu)的,其它的是針對表中的數(shù)據(jù)的柳恐。
創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE [IF NOT EXISTS]? db_name
[DEFAULT]? CHARACTER SET charaset_name? 指定數(shù)據(jù)庫采用的字符集
[DEFAULT]? COLLATE? collation_name? ? ? ? ? ? 指定數(shù)據(jù)庫字符集的比較方式
字符集的支持分為四個層次:
服務(wù)器(server)伐脖,數(shù)據(jù)庫(database),數(shù)據(jù)表(table)和連接(connection):
character_set_server:這是設(shè)置服務(wù)器使用的字符集
character_set_client :這是設(shè)置客戶端發(fā)送查詢使用的字符集
character_set_connection :這是設(shè)置服務(wù)器需要將收到的查詢串轉(zhuǎn)換成的字符集
character_set_results :這是設(shè)置服務(wù)器要將結(jié)果數(shù)據(jù)轉(zhuǎn)換到的字符集乐设,轉(zhuǎn)換后才發(fā)送給客戶端
顯示數(shù)據(jù)庫語句
SHOW DATABASES
顯示數(shù)據(jù)庫創(chuàng)建語句
SHOW CREATE DATABASE db_name
修改數(shù)據(jù)庫
ALTER DATABASE db_name ? character? set? utf8
數(shù)據(jù)庫刪除語句
DROP DATABASE [IF EXITS] db_name
同時修改列名和列的數(shù)據(jù)類型的方法:通乘媳樱可以寫成 alter table 表名 change column 舊列名 新列名 新的列類型
創(chuàng)建表(基本語句)
CREATE TABLE table_name? ? ? ? 注意:創(chuàng)建表前,要先使用use db語句使用庫近尚。
(
field1 datatype,
field2 datatype,
field3 datatype,
field4 datatype,
....
)character? 字符集 collate 校對規(guī)則
顯示所有表
SHOW TABLES
顯示表的創(chuàng)建語句
SHOW CREATE TABLE table_name
顯示表的結(jié)構(gòu)
DESC table_name
刪除表
DROP TABLE table_name
使用 ALTER TABLE 語句追加, 修改, 或刪除列的語法.
ALTER TABLE table
ADD (column datatype [DEFAULT expr]
[ , column datatype]....);
ALTER TABLE table
MODIFY (column datatype [DEFAULT expr]
[ , column datatype]....);
ALTER TABLE table
DROP (column);
修改表的名稱:Rename table 表名 to 新表名
修改表的字符集:alter table student character set utf8
C(create增加數(shù)據(jù)) Insert語句
INSERT INTO? table [(column [, column...])]
VALUES (value [, value...]);
插入的數(shù)據(jù)應(yīng)與字段的數(shù)據(jù)類型相同。數(shù)據(jù)的大小應(yīng)在列的規(guī)定范圍內(nèi)戈锻,例如:不能將一個長度為80的字符串加入到長度為40的列中歼跟。在values中列出的數(shù)據(jù)位置必須與被加入的列的排列位置相對應(yīng)。字符和日期型數(shù)據(jù)應(yīng)包含在單引號中格遭。插入空值哈街,不指定或insert into table value(null)
U(update更新數(shù)據(jù)) Update語句
UPDATE? tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
UPDATE語法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要給予哪些值如庭。WHERE子句指定應(yīng)更新哪些行叹卷。如沒有WHERE子句撼港,則更新所有的行
D(drop刪除數(shù)據(jù)) Delete語句
delete from tbl_name
[WHERE where_definition]
如果不使用where子句,將刪除表中所有數(shù)據(jù)骤竹。Delete語句不能刪除某一列的值(可使用update)使用delete語句僅刪除記錄帝牡,不刪除表本身。如要刪除表蒙揣,使用drop table語句靶溜。同insert和update一樣,從一個表中刪除記錄將引起其它表的參照完整性問題懒震,在修改數(shù)據(jù)庫數(shù)據(jù)時罩息,頭腦中應(yīng)該始終不要忘記這個潛在的問題。
R(Retrieve查找數(shù)據(jù)) Select語句
SELECT [DISTINCT] *|{column1, column2. column3..}
FROM ? table;
Select 指定查詢哪些列的數(shù)據(jù)个扰。column指定列名瓷炮。*號代表查詢所有列。From指定查詢哪張表递宅。DISTINCT可選娘香,指顯示結(jié)果時,是否剔除重復(fù)數(shù)據(jù)
在select語句中可使用表達(dá)式對查詢的列進(jìn)行運(yùn)算
SELECT *|{column1|expression, column2|expression办龄,..}
FROM? table;
在select語句中可使用as語句
SELECT column as 別名 from 表名;
使用order by 子句排序查詢結(jié)果
SELECT column1, column2. column3..
FROM? table;
order by column asc|desc
Order by 指定排序的列烘绽,排序的列即可是表中的列名,也可以是select 語句后指定的列名俐填。Asc 升序安接、Desc 降序ORDER BY 子句應(yīng)位于SELECT語句的結(jié)尾。
使用group by 子句對列進(jìn)行分組
SELECT column1, column2. column3.. FROM? table;
group by column
使用having 子句過濾
SELECT column1, column2. column3..
FROM? table;
group by column having ...
Having和where均可實(shí)現(xiàn)過濾英融,但在having可以使用合計(jì)函數(shù),having通常跟在group by后盏檐,它 作用于組。
SQL函數(shù):
合計(jì)函數(shù)-count
Count(列名)返回某一列驶悟,行的總數(shù)
Select count(*)|count(列名) from tablename
[WHERE where_definition]
合計(jì)函數(shù)-SUM
Sum函數(shù)返回滿足where條件的行的和
Select sum(列名){,sum(列名)…} from tablename
[WHERE where_definition]
合計(jì)函數(shù)-AVG
AVG函數(shù)返回滿足where條件的一列的平均值
Select sum(列名){,sum(列名)…} from tablename
[WHERE where_definition]
合計(jì)函數(shù)-MAX/MIN
Max/min函數(shù)返回滿足where條件的一列的最大/最小值
Select max(列名) from tablename
[WHERE where_definition]