1. 程式人生 > >資料庫介紹常用資料庫,SQL增刪改查

資料庫介紹常用資料庫,SQL增刪改查

引題

為什麼使用資料庫:
之前的學習中我們已經可以儲存資料、變數、讀寫本地檔案(txt、csv)
1.持久化。記憶體中的變數當程式重啟和電腦斷電時丟失資料,而硬碟可以長時間、持久的儲存資料。資料儲存到硬碟上的過程叫持久化。
2.資料庫更加專業強大。遠比純文字文件、excel表格強大,增刪改查和統計函式。

資料庫基本概念

觀察表格、excel表格,打開了 學生列表.xls excel表格文件。類比引用資料庫概念。

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

常見資料庫介紹

關係型資料庫:

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

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

資料庫欄位型別

資料庫建立表示要事先告訴計算機硬碟,每張表的欄位什麼型別、將要儲存的內容大還是小。長度過小,內容值存不進去,長度太大,浪費硬碟空間。我們需要選擇合適的型別和長度。
各資料庫欄位關鍵字基本一致。常用欄位型別如下:

  1. 數值
    整數:常用INT INTEGER 佔四個位元組,2**32,可以表示常用範圍整數。
    其他TINYINT(1位元組) SMALLINT(2位元組) MEDIUMINT(3位元組)
    BIGINT(8位元組)適用身份證號、VIP號碼比較長的編號。

  2. 浮點數
    常用 FLOAT(4位元組) 單精度小數。即使是單精度,範圍也不小。
    DOUBLE(8位元組) 雙精度小數。
    場景 金錢計算,火箭軌道計算。

  3. 字串
    CHAR 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-11-11"
    DATETIME 日期時間, 形如"2018-11-11 11:11:11"
    TIMESTAMP 時間戳, 形如 1541667299.8460715

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

SQL

structured query language 結構化查詢語言。專門對資料庫進行查詢、增加、修改、刪除、統計的操作語言。
CURD增刪改查 create update retrieve delete。
書寫風格,關鍵字大寫最好。表名大小寫都行,但是在一些資料庫中不區分大小寫。建議小寫。
基本語法。
1.查詢
SELECT 欄位1,欄位2,欄位3,…FROM 表名; python中返回值[(1, 101班, 小明, 男), (), ()]欄位比較多時簡寫為 SELECT*FROM表名; 由於資料庫執行時會把 * 轉換為欄位再執行,效能輕微下降。
SELECT * FROM 表名 WHERE 欄位1 = 過濾值, 字典二 = 過濾值; where 條件查詢。
2.新增
INSERT (欄位1,欄位2…)INTO 表名 VALUES(1,“小明”, “男”);
簡寫 INSERT INTO 表名 VALUES(1, “小明”, “男”)
3.修改
UPDATE FROM 表名 SET 欄位1=新值,欄位2=新值 WHERE 欄位1 = 要修改的那一行那一個欄位的值;
注意沒有where條件限定行的話將會更新整張表。
4.刪除
DELETE FROM 表名; 注意會刪除整張表的所有行。
DELETE FROM WHERE 欄位1 = 值; 限定條件刪除某些行。
5. 建立表
CREATE TABLE 表名{
欄位型別 欄位名,其他關鍵字(主鍵 備註),
INT id PRIMARY KEY,
VARCHAR(20) username,
}