本文目錄:
- 1.關(guān)系型數(shù)據(jù)庫
- 2.什么是非關(guān)系型數(shù)據(jù)庫
- 3.NoSQL常見場(chǎng)景
- 4.MySQL常用命令
1.關(guān)系型數(shù)據(jù)庫
是指采用了關(guān)系模型來組織數(shù)據(jù)的數(shù)據(jù)庫
所謂關(guān)系模型就是“一對(duì)一懂拾、一對(duì)多著拭、多對(duì)多”等關(guān)系模型,關(guān)系模型就是指二維表格模型,因而一個(gè)關(guān)系型數(shù)據(jù)庫就是由二維表及其之間的聯(lián)系組成的一個(gè)數(shù)據(jù)組織尺铣。
關(guān)系型數(shù)據(jù)可以很好地存儲(chǔ)一些關(guān)系模型的數(shù)據(jù),比如一個(gè)老師對(duì)應(yīng)多個(gè)學(xué)生的數(shù)據(jù)(“多對(duì)多”),一本書對(duì)應(yīng)多個(gè)作者(“一對(duì)多”)牌废,一本書對(duì)應(yīng)一個(gè)出版日期(“一對(duì)一”)
常見的關(guān)系型數(shù)據(jù)庫:
Oracle廉侧、DB2页响、MySQL
關(guān)系型數(shù)據(jù)庫的特點(diǎn):
安全(因?yàn)榇鎯?chǔ)在磁盤中,不會(huì)說突然斷電數(shù)據(jù)就沒有了)段誊、
容易理解(建立在關(guān)系模型上)
但不節(jié)省空間(因?yàn)榻⒃陉P(guān)系模型上闰蚕,就要遵循某些規(guī)則,好比數(shù)據(jù)中某字段值即使為空仍要分配空間)
2.什么是非關(guān)系型數(shù)據(jù)庫
非關(guān)系型數(shù)據(jù)庫主要是基于“非關(guān)系模型”的數(shù)據(jù)庫(由于關(guān)系型太大连舍,所以一般用“非關(guān)系型”來表示其他類型的數(shù)據(jù)庫)
非關(guān)系型模型比如有:
- 列模型:存儲(chǔ)的數(shù)據(jù)是一列列的没陡。關(guān)系型數(shù)據(jù)庫以一行作為一個(gè)記錄,列模型數(shù)據(jù)庫以一列為一個(gè)記錄索赏。(這種模型盼玄,數(shù)據(jù)即索引,IO很快潜腻,主要是一些分布式數(shù)據(jù)庫)
- 鍵值對(duì)模型:存儲(chǔ)的數(shù)據(jù)是一個(gè)個(gè)“鍵值對(duì)”埃儿,比如name:liming,那么name這個(gè)鍵里面存的值就是liming
- 文檔類模型:以一個(gè)個(gè)文檔來存儲(chǔ)數(shù)據(jù),有點(diǎn)類似“鍵值對(duì)”融涣。
NoSQL是對(duì)不同于傳統(tǒng)的關(guān)系數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱
常見非關(guān)系模型數(shù)據(jù)庫:
列模型:Hbase
鍵值對(duì)模型:redis,MemcacheDB
文檔類模型:mongoDB
非關(guān)系型數(shù)據(jù)庫的特點(diǎn):
效率高(因?yàn)榇鎯?chǔ)在內(nèi)存中)童番、
但不安全(斷電丟失數(shù)據(jù),但其中redis可以同步數(shù)據(jù)到磁盤中)暴心,現(xiàn)在很多非關(guān)系型數(shù)據(jù)庫都開始支持轉(zhuǎn)存到磁盤中妓盲。
3.NoSQL常見場(chǎng)景
1.內(nèi)嵌
內(nèi)嵌是指存在關(guān)聯(lián)關(guān)系的的文檔,放在同一文檔中专普,以數(shù)組的形式存放悯衬。
{
"username": "brian",
"gender": 0,
"roles": ["admin", "user"],
"address": [
"address1",
"address2"
]
}
內(nèi)嵌設(shè)計(jì),減少了關(guān)聯(lián)查詢檀夹,適合于單類需要描述的屬性和不經(jīng)常變化的屬性
2.父/子引用
父引用時(shí)指存在一對(duì)多的情況中筋粗,放在同一文檔中,以數(shù)組的形式存放
{
"tid": "postID",
"titile": "文章標(biāo)題",
"catalog": "index",
"created": "1436731249",
"comments": [
"commentID1",
"commentID2"
]
}
子引用是指存在一對(duì)非常多的情況中炸渡,由于數(shù)據(jù)庫文檔存放限制娜亿,這個(gè)時(shí)候進(jìn)行反向引用
{
"cid": "commentID",
"tid": "postID",
"comment": "這是回復(fù)的內(nèi)容,不錯(cuò)0龆隆买决!",
"created": "1436731249",
"isRead": 0,
"isBest": 0,
"status": 1,
}
一對(duì)非常多的時(shí)候沛婴,為什么要使用到子引用?無限增多的數(shù)據(jù)不能存放到數(shù)組中督赤。
3.反范式
范式是指按既定的用法嘁灯,范式就是一種公認(rèn)的模型或模式。反范式就是不走尋常套路的用法
{
"tid": "postID",
"titile": "文章標(biāo)題",
"created": "1436731249",
"users": [{
"uid": "用戶ID",
"name": "用戶昵稱",
"isVip": "1"
}]
}
設(shè)計(jì)原則小結(jié):
優(yōu)先考慮內(nèi)嵌躲舌,如果單獨(dú)訪問丑婿,則不適合
數(shù)組不應(yīng)該無限制的增長(zhǎng)
考慮讀寫比,考慮反范式没卸,考慮應(yīng)用場(chǎng)景
4.MySQL常用命令
MySQL官網(wǎng):https://www.mysql.com/
登陸和退出
mysql -uroot -p
exit 或者 \q
_查看數(shù)據(jù)庫
SHOW DATABASES;
創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE 數(shù)據(jù)庫名 charset utf8
選擇數(shù)據(jù)庫
USE 數(shù)據(jù)庫名
刪除數(shù)據(jù)庫
DROP DATABASE [IF EXISTS] db_name
查看數(shù)據(jù)表
SHOW TABLES
創(chuàng)建數(shù)據(jù)表
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,
)
實(shí)際操作數(shù)據(jù)庫會(huì)使用可視化工具羹奉,方便快捷,個(gè)人使用的是Navicat Premium约计。
常見的數(shù)據(jù)類型
數(shù)據(jù)類型有很多種诀拭,因?yàn)楹蛿?shù)據(jù)庫打交道不是很多,所以這里只列舉幾個(gè)最常用的類型病蛉,其它使用的時(shí)候再查閱文檔炫加。
1.(數(shù)字類型)INT 正常大小的整數(shù),可以有符號(hào)铺然,也可以沒有符號(hào)。如果是有符號(hào)整數(shù)酒甸,其允許的取值范圍是-2147483648~2147483647魄健;無符號(hào)整數(shù)的取值范圍是從0至4294967295。最高可指定11位數(shù)字插勤。
2.(數(shù)字類型)FLOAT(M,D) 不帶符號(hào)的浮點(diǎn)數(shù)沽瘦。M 代表顯示長(zhǎng)度,D 代表小數(shù)位數(shù)农尖。這兩個(gè)參數(shù)都不是必需參數(shù)析恋,它們默認(rèn)為10, 2,表示小數(shù)點(diǎn)后有2位數(shù)字盛卡,而整個(gè)數(shù)字的位數(shù)為10(包含小數(shù)位數(shù))助隧。FLOAT 類型的小數(shù)精度可以達(dá)到24位。
3.(時(shí)間類型)DATE YYYY-MM-DD (年-月-日)格式顯示的日期滑沧,取值范圍從1000-01-01 到 9999-12-31并村。比如1973年的12月30日就存為 1973-12-30。
4.(字符串類型)CHAR(M) 長(zhǎng)度固定的字符串滓技,長(zhǎng)度范圍從1~255個(gè)字符哩牍,比如CHAR(5)。在存儲(chǔ)時(shí)令漂,會(huì)向右用空格補(bǔ)齊指定長(zhǎng)度膝昆。長(zhǎng)度并非必須參數(shù)丸边,默認(rèn)長(zhǎng)度為1。
5.(字符串類型)VARCHAR(M) 長(zhǎng)度不定的字符串荚孵,長(zhǎng)度范圍從1~255個(gè)字符妹窖。比如:CHAR(25)。在創(chuàng)建VARCHAR字段時(shí)处窥,必須定義長(zhǎng)度嘱吗。
基本CURD
查詢數(shù)據(jù)
查詢一張表中的所有數(shù)據(jù)
SELECT * FROM 表名
查詢表中的某個(gè)字段
SELECT 列名 FROM 表名
查詢符合條件的數(shù)據(jù)
SELECT * FROM 表名 WHERE 列名 = 列值
插入數(shù)據(jù)(一個(gè)完整的行)
INSERT INTO 表名 VALUES (列值1, 列值2, 列值3, ...)
插入數(shù)據(jù)(插入多個(gè)完整的行)
INSERT INTO 表名 (列名1, 列名2, 列名3, ...) VALUES (列值1, 列值2, 列值3, ...), (列值1, 列值2, 列值3, ...), ...
修改一條數(shù)據(jù)
UPDATE 表名 SET 列名 = 新值 WHERE 列名=給定列值
UPDATE user SET name = 'zhangsan' WHERE id=2
刪除一條數(shù)據(jù)
DELETE FROM 表名 列名=給定列值
DELETE FROM user WHERE id=3
//使用DELETE語句需要特別注意,如果省略了WHERE子句滔驾,將刪除表中所有行