資料庫簡介
什麼是資料庫
官方定義:
資料庫是將資料按照一定的資料模型組織, 描述和儲存, 具有較小的冗餘, 較高資料獨立性和易擴充套件性, 並作為各種使用者共享的資料集合
不過, 我更喜歡我自己的理解:
資料庫, 顧名思義, 就是資料的倉庫
其實相關概念還有很多, 舉個栗子吧...
假設你有一個工廠, 用來生產電視機, 那麼肯定也需要一個倉庫來儲存電視, 還需要招聘一個管理倉儲的王大爺...
那麼問題來了, 你為什麼需要一個倉庫?
- 存放電視機, 方便統計和管理(
資料管理
) - 找個王大爺, 防止電視失竊(
資料持久化
)
這裡的電視機就是DATA(資料)
存放電視機的倉庫就是DB(資料庫)
這裡的王大爺就是DBA(資料庫管理員)
你問:"老王, 我們們今天有多少電視機入庫?"
王大爺說: "稍等, 老總, 我用管理軟體查一下..."
這裡的管理軟體就是DBMS(資料庫管理系統)
, 常見DMS: MySQL, Oracle, SQL server
有下面一個公式:
DBS = DBA 使用 DBMS 管理 DB
資料庫系統
就是資料庫管理員
使用資料庫管理系統
來管理資料庫
什麼是資料持久化
簡單來說, 就是想辦法不讓資料丟失.
可能你會好奇, 什麼資料存在計算機裡, 還會丟失?
答案是: 可能會, 也可能不會...主要看你把它存到了哪裡
這裡需要引出兩個概念記憶體
,硬碟
記憶體的特點, 速度快, 非常之快, 斷電資料丟失
硬碟的特點, 容量大, 非常之大, 斷電資料不丟失
簡單的說, 記憶體小而快, 硬碟慢而大, 4000G(4T)硬碟的價格約等於16G記憶體的價格, 4000:16
所以, 要想資料持久化, 就必須把資料存到硬碟裡
如果你是用資料庫管理系統的話, 它會自動完成資料持久化
什麼是mysql
最著名的資料庫管理系統DBMS, 就是前面老王使用的管理軟體
當然DBMS不止MySQL一個, MySQL為什麼能在眾多DBMS中脫穎而出呢?
- 體積小, 執行快
- 價效比高, 因為不要錢...
- 方便各個作業系統移植
- 對SQL語句支援的很好
- 執行速度很快
安裝mysql
這裡只講windows系統的壓縮包安裝方式, 因為這種方式最簡單,最流行
MySQL5.7官網下載地址
安裝MySQL
1. 解壓
把壓縮包解壓到D:\test_mysql_57
(路徑隨意)

2. 新增環境變數
把bin目錄的路徑()新增到環境變數, 因為該資料夾下有msyql.exe(命令列工具-客戶端)
和msyqld.exe(服務端)







一路點選確定
, 關閉剛才所有的彈窗
3. 配置檔案
建立配置檔案: D:\test_mysql_57\my.ini
建立資料儲存資料夾: D:\test_mysql_57\data


內容如下
[client]
port=3306 # 預設埠號
[mysql]
default-character-set=utf8 # 預設字符集
[mysqld]
port=3306
basedir="D:/test_mysql_57/" # mysql路徑
datadir="D:/test_mysql_57/data/" # mysql資料路徑
character-set-server=utf8 # 預設字符集
default-storage-engine=innodb # 預設資料庫引擎
複製程式碼
4. 使用命令列, 安裝mysql服務
windows+X
開啟命令列(管理員身份),

輸入命令: mysqld install 連線名 --defaults-file="配置檔案路徑"
mysqld install mysql3306 --defaults-file="D:\test_mysql_57\my.ini"
複製程式碼

5. 初始化mysql
輸入如下命令
mysqld --initialize
複製程式碼

6. 啟動mysql
輸入如下命令
net start mysql3306
複製程式碼
7. 重置密碼
再從檔案中找到預設密碼
D:\test_mysql_57\data\USER-20170622RQ.err

使用預設密碼登入mysql, 重置密碼
mysql -h localhost -u root -p
複製程式碼

SET PASSWORD = PASSWORD('你的新密碼');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
flush privileges;
複製程式碼

8. 使用新密碼, 重新登入, 開心的輸命令吧

啟動/關閉/重啟mysql
啟動mysql:輸入 net start mysql;
停止mysql:輸入 net stop mysql;
windows下不能直接重啟(restart),只能先停止,再啟動。
資料庫基本概念
資料庫
存放資料的倉庫, 所以本質上是一個容器

資料表
通過列
和行
組成二維表, 來儲存資料

欄位
一列稱為一個欄位
記錄
一行稱為一個記錄
資料
每一個格子
存一個資料
總結
資料庫
裡有資料表
, 資料表
裡有行
和列
, 行來儲存資料
, 列來描述資料



表關係
一對一(1:1)
使用者表和使用者詳情表
「使用者詳情表表」,其欄位包含:姓名、性別、年齡、身高、體重、籍貫和居住地等
一對多/多對一(1:N/N:1)
國家表,城市表
多對多(N:N)
學生表, 課程表
需要中間表建立聯絡
正規化
簡介
什麼是正規化
設計資料表遵守的規範
意義何在?
是為了解決資料的儲存和優化問題
特點
- 非必須
- 越來越嚴格
- 向下相容
內容
- 資料表中的每一列(每個欄位)必須是不可拆分的最小單元,也就是確保每一列的原子性
- 滿足 1NF 後,要求表中的所有列,都必須依賴於主鍵,而不能有任何一列與主鍵沒有關係
- 必須先滿足第二正規化(2NF),要求:表中的每一列只與主鍵直接相關而不是間接相關
說人話
- 一個欄位只存一個資料
- 一張表只幹一件事
- 不屬於這個表的欄位, 不要加到這個表裡來



逆規範化
冗餘和效率
符合正規化, 資料不容易重複, 但是查詢起來比較費事
為了速度, 可以多買點硬碟...