L10資料庫——資料庫介紹

GAST發表於2018-11-22

資料庫介紹

引題

為什麼使用資料庫
之前的學習中我們已經可以儲存資料、變數、讀寫本地檔案(txt、CSV)。

1.持久化。記憶體中的變數當程式重啟或電腦斷電時丟失資料,二硬碟可以長時間、持久地儲存資料,資料儲存到硬碟上的過程叫持久化。
2.資料庫更加專業強大,遠比純文字文件、Excel表格強大,增刪改查和統計函式。

資料庫基本概念

觀察表格、Excel表格,開啟 學生列表。xls excel表格文件。類比引入資料庫概念

  1. 庫 schema:整個表格文件。好像一個物流公司共佔地100畝,蓋了50個倉庫,A01倉庫負責儲存河南客戶貨物,A02倉庫負責廣州xx專案物料,每一個倉庫對應一個專案。
  2. 表 table:對應Excel表格裡sheet1 sheet2。由行內容和列組成。描述一個類,每一行描述一個物件。
  3. 欄位 field :對應表格頭部的 序號、班級、姓名。就好像類的屬性。欄位裡儲存的值的型別需要事先定義
  4. 值 value :表格每一行具體儲存的資訊。
  5. 主鍵 primary key :類似表格中 序號 這一列。資料中這一列會自增並不會重複。
  6. 外來鍵 foreign key :表1學習資訊裡一個欄位引用自另一個表班級資訊表的id列。優點是易於維護。保持資料一致性。
  7. 正規化:描述 智遊學校時,可以把全部資訊定義到一張表上,也可以分為學員資訊表、班級資訊表、課程資訊表。劃分維度、資訊、耦合度可高可低,具體結合業務邏輯分析。

常見資料庫介紹

關係型資料庫:
1. sqlite:輕量級資料庫。功能基礎簡單,在資料較少情況下效能並不比重型資料庫底,優點,Python直譯器內建驅動,無需安裝直接使用,適合初學資料庫。手機應用使用的就是sqlite資料庫
2.mysql:最流行的資料庫。中型。開源、PHP流行推動了mysql的流行
3. PostgreSQL:大象資料庫,號稱最先進的資料庫。從大學興起的開源資料庫、架構優秀、功能前衛,資料量很大的時候,效能衰減不明顯,消耗相同硬體資源的情況下效能和穩定性,優於mysql資料庫。django odoo等Python礦建官方推薦使用此資料庫。但是目前市場佔有率還不高
4.oracle:地位很高的商用資料庫。昂貴、穩定、功能強大,常與java配合使用。
5.DB2 sybase MSSQL等,其他商用資料庫
6.access:微軟office套件中包含,輕量,由於資料庫門檻,使用者不多

no-sql(no only sql)型資料庫
7.mongodb : 儲存單位是文件,son(類似後端dict)結構整個存進去,資料常放在記憶體中以獲得查詢效能,定期把資料持久化到硬碟上
8.redis : 鍵值對 “name”="小明"類似與這樣’

資料庫欄位型別

資料庫:
資料庫建立表示要事先告訴計算機硬碟,每張表的每個欄位存什麼型別、將要儲存的內容大還是小,我們需要選擇合適的型別和長度,長度過小,內容值存不進去,長度太大,浪費硬碟空間,我們需要選擇合適的型別和長度。
各資料庫欄位型別關鍵字基本一致,常用欄位型別如下:
1.數值
整數:常用INT INTEGER 佔四個位元組,2**32,可以表示常用範圍整數。
其他 TINYINT(1個位元組) SMALLINT(2個位元組) MEDIUMINT(3個位元組)
BIGINT(8個位元組)適用於身份證號、VIP號碼比較長的編號。
2.浮點數
(常用)FLOAT(4位元組) 單精度小數。 即使是單精度,範圍也不小
DOUBLE(8位元組) 雙精度小數
場景:金錢計算,軌道計算。
3.字串
CHAP char(10) 可以儲存長度(位元組長度)不超過10的字串,例如"hello"。但由於長度按照位元組判斷,存unicode編碼的中文只能存3個。
常用 VARCHAR 0-65535位元組, variable char 可變字串。VARCHAR(5) 可以儲存5箇中文或5個英文字母。場景:使用者名稱、家庭住址。
TEXT TINYTEXT medium longtext , 場景:大文字儲存,書籍文章、使用者反饋。
BLOB medium long ,二進位制檔案 場景:圖片、視訊。但一般不在資料庫中儲存圖片和視訊,因為會增加資料庫的計算壓力和寬頻傳輸壓力和備份還原的難度和使用者資訊靜態資源耦合到一起,解決方案是 圖片、視訊存到普通檔案目錄下,而資料庫中儲存檔案路徑。
4.日期
DATE 日期,形如"2018-22-08"
DATETIME 日期時間 “2018-22-08 16:52:30.123” “2018-22-08 16:52:30.123 CTM+8”
TIMESTAMP 時間戳 1541667270 1541667270.7252207

sqlite的欄位比較簡化
INTEGER 整數
REAL 浮點數
TEXT 字串
NULL 什麼都不存

(SQL)

structured query language 結構化查詢語言。專門對資料庫進行查詢、增加、修改、刪除、統計的操作語言。
CURD 增刪改查 select update retrieve delete。
書寫風格,大小寫都行,建議大寫,表明大小寫都行,但是在一些資料庫中不區分大小寫,建議小寫

(重要)基本語法。
1.查詢

SELECT 欄位1,欄位2,欄位3…FROM 表明; Python中返回值形如[(1,502班,小明,男),(),()]。
欄位比較多時簡寫為 SELECT * FROM 表明; 由於資料庫執行時會把*轉換為欄位再執行,效能極微小下降。
SELECT * FROM 表名 WHERE 欄位1 = 過濾值,字典2 = 過濾值; where限定條件查詢

2.新增
INSERT 欄位1,欄位2… INTO 表名 VALUES (1,“小明”.“男”);
簡寫:INSERT INTO 表名 VALUES (1,“小明”.“男”);

3.修改
UPDATE 表名 SET 欄位1=新值,欄位2=新值 WHERE 欄位1 = 要修改的那一行那一個欄位的值;
注意沒有where條件限定行的話將會更新整張表。

4.刪除
DELETE FROM 表名; 注意會刪除整張表的所有行。
DELETE FROM 表名 WHERE 欄位1 = 值; 限定條件刪除某些行

5.建立表
CREATE 表名 {
欄位型別 欄位名 其他關鍵字(主鍵 備註),
INT id PRIMARY KEY,
VARCHAR(20) username ,
}

進階語法:
分組group by、統計、聚合having max avg, 爬蟲中後期講這些
(課下)儲存過程:資料庫指令碼,類似後端語言,有變數、控制語句、函式等。適合書寫複雜SQL語句,效率比較高的,效率較高。

相關文章