#MySQL -- 基本使用 ##Relational Database Management System(RDBMS)mysql
- 所謂的關係型數據庫RDBMS,是創建在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據
- 查看數據庫排名:https://db-engines.com/en/ranking
- 關係型數據庫的主要產品
- oracle:在之前的大型項目中使用,銀行,電信等項目
- mysql:web時代使用最普遍的關係型數據庫
- ms sql server:在微軟的項目中使用
- sqlite:輕量級數據庫,主要應用在移動平臺 ##MySQL簡介: MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB公司開發,後來被Sun公司收購,Sun公司後來又被Oracle公司收購,目前屬於Oracle旗下產品。 特色:
使用C和C++編寫,並使用了多種編譯器進行測試,保證源代碼的可移植性 支持多種操做系統,如Linux、Windows、AIX、FreeBSD、HP-UX、MacOS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris等 爲多種編程語言提供了API,如C、C++、Python、Java、Perl、PHP、Eiffel、Ruby等 支持多線程,充分利用CPU資源 優化的SQL查詢算法,有效地提升查詢速度 提供多語言支持,常見的編碼如GB23十二、BIG五、UTF8 提供TCP/IP、ODBC和JDBC等多種數據庫鏈接途徑 提供用於管理、檢查、優化數據庫操做的管理工具 大型的數據庫。能夠處理擁有上千萬條記錄的大型數據庫 支持多種存儲引擎 MySQL 軟件採用了雙受權政策,它分爲社區版和商業版,因爲其體積小、速度快、整體擁有成本低,尤爲是開放源碼這一特色,通常中小型網站的開發都選擇MySQL做爲網站數據庫 MySQL使用標準的SQL數據語言形式 Mysql是能夠定製的,採用了GPL協議,你能夠修改源碼來開發本身的Mysql系統 在線DDL更改功能 複製全局事務標識 複製無崩潰從機 複製多線程從機
##數據完整性 一個數據庫就是一個完整的業務單元,能夠包含多張表,數據被存儲在表中 在表中爲了更加準確的存儲數據,保證數據的正確有效,能夠在建立表的時候,爲表添加一些強制性的驗證,包括數據字段的類型、約束。 數據類型:web
能夠經過查看幫助文檔查閱全部支持的數據類型 使用數據類型的原則是:夠用就行,儘可能使用取值範圍小的,而不用大的,這樣能夠更多的節省存儲空間 經常使用數據類型以下: 整數:int,bit 小數:decimal 字符串:varchar,char 日期時間: date, time, datetime 枚舉類型(enum) 特別說明的類型以下: decimal表示浮點數,如decimal(5,2)表示共存5位數,小數佔2位 char表示固定長度的字符串,如char(3),若是填充'ab'時會補一個空格爲'ab ' varchar表示可變長度的字符串,如varchar(3),填充'ab'時就會存儲'ab' 字符串text表示存儲大文本,當字符大於4000時推薦使用 對於圖片、音頻、視頻等文件,不存儲在數據庫中,而是上傳到某個服務器上,而後在表中存儲這個文件的保存路徑
##約束:算法
主鍵primary key:物理上存儲的順序 非空not null:此字段不容許填寫空值 唯一unique:此字段的值不容許重複 默認default:當不填寫此值時會使用默認值,若是填寫時以填寫爲準 外鍵foreign key:對關係字段進行約束,當爲關係字段填寫值時,會到關聯的表中查詢此值是否存在,若是存在則填寫成功,若是不存在則填寫失敗並拋出異常 說明:雖然外鍵約束能夠保證數據的有效性,可是在進行數據的crud(增長、修改、刪除、查詢)時,都會下降數據庫的性能,因此不推薦使用,那麼數據的有效性怎麼保證呢?答:能夠在邏輯層進行控制
##數據庫的設計:sql
- 關係型數據庫建議在E-R模型的基礎上,咱們須要根據產品經理的設計策劃,抽取出來模型與關係,制定出表結構,這是項目開始的第一步
- 在開發中有不少設計數據庫的軟件,經常使用的如power designer,db desinger等,這些軟件能夠直觀的看到實體及實體間的關係
- 設計數據庫,多是由專門的數據庫設計人員完成,也多是由開發組成員完成,通常是項目經理帶領組員來完成
##三範式: 通過研究和對使用中問題的總結,對於設計數據庫提出了一些規範,這些規範被稱爲範式(Normal Form) 目前有跡可尋的共有8種範式,通常須要遵照3範式便可。數據庫
- 第一範式(1NF):強調的是列的原子性,即列不可以再分紅其餘幾列。
- 第二範式(2NF):首先是 1NF,另外包含兩部份內容,一是表必須有一個主鍵;二是沒有包含在主鍵中的列必須徹底依賴於主鍵,而不能只依賴於主鍵的一部分。
- 第三範式(3NF):首先是 2NF,另外非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴。即不能存在:非主鍵列 A 依賴於非主鍵列 B,非主鍵列 B 依賴於主鍵的狀況。
E-R模型
E表示entry,實體,設計實體就像定義一個類同樣,指定從哪些方面描述對象,一個實體轉換爲數據庫中的一個表 R表示relationship,關係,關係描述兩個實體之間的對應規則,關係的類型包括包括一對1、一對多、多對多 關係也是一種數據,須要經過一個字段存儲在表中 實體A對實體B爲1對1,則在表A或表B中建立一個字段,存儲另外一個表的主鍵值 實體A對實體B爲1對多:在表B中建立一個字段,存儲表A的主鍵值 實體A對實體B爲多對多:新建一張表C,這個表只有兩個字段,一個用於存儲A的主鍵值,一個用於存儲B的主鍵值
##邏輯刪除編程
對於重要數據,並不但願物理刪除,一旦刪除,數據沒法找回 刪除方案:設置isDelete的列,類型爲bit,表示邏輯刪除,默認值爲0 對於非重要數據,能夠進行物理刪除 數據的重要性,要根據實際開發決定