初識MySql

數據庫介紹

   咱們以前使用的數據都是存儲在內存中的!好比說咱們寫一個註冊功能。mysql

咱們首先須要在內存中建立一個對象,以後輸入註冊須要的用戶名和密碼等數據!linux

而後登錄時,輸入註冊的數據便可完成登錄!sql

 

  註冊成功以後  好比用戶名是admin 密碼是123456數據庫

 

出現的問題:windows

請問安全

01.用戶的數據放在哪裏了?服務器

02.若是放在內存中,下次登錄還使用以前註冊的用戶名和密碼,能登錄嗎?數據結構

  顯然是不能的! 由於程序一旦運行完畢,內存中的數據也隨之消失!分佈式

 

怎麼辦?性能

01使用序列化保存對象到文件中

02.使用xml保存數據到文件中

 

   可是把大量的數據放在文件中,咱們對文件數據的讀寫效率是相對較慢的!

並且也不便於咱們管理文件中的數據!這時候就須要有新的存儲方式來代替!

就是咱們所謂的數據庫(存儲數據的倉庫)!

  什麼是數據庫

 定義  按照數據結構來組織 儲存和管理數據的倉庫,咱們稱之爲數據庫Database(DB)

這些存儲的數據能夠是多種形式 如文字 符號 圖片 視頻 音頻等

 

從廣義上來講 咱們的txt文件 word文檔 excel文件 均可以理解成一個數據庫

在it的世界裏數據庫指的是有專業技術團隊開發的用於存儲數據的軟件系統

 

使用 數據庫的必要性

一、能夠結構化的存儲大量的數據信息 方便用戶進行訪問和操做數據庫能夠對數據進行分類保存 提升咱們的訪問效率

二、能夠保證數據信息的一致性 完整性 下降數據的冗餘

數據庫中有事務(ACID特性)來保證數據信息的一致性 完整性 

數據庫自身也有有數來下降數據的冗餘

ps 數據冗餘 (redundance)數據重複的現象

三、能夠知足應用的安全和共享方面的要求

 若是咱們把員工的全部信息 都保存在一個txt文件中 那麼員工的薪水就會暴露出來 很顯然這是不容許的

若是把數據放在數據庫中 咱們能夠限制只有財務人員才能查詢薪水 而其餘員工只能查詢本身的信息

 

常見的關係型數據庫

一、sql server

  是microsoft公司的關係型數據庫管理系統

二、Mysql  

  是一種開放源代碼的關係型數據庫管理系統

三、Oracle

   是Oracle公司的關係型數據庫管理系統

ps 雖然數據不同 可是對數據庫的操做都大同小異 有的操做命令都是一致的

關係型數據庫:是指創建在關係模型基礎上的數據庫 藉助於集合代數等數學概念和方法來處理數據庫的數據

 

 

關係型數據庫與菲關係型數據庫

常見的非關係型數據庫  Mongo DB  Redis  HBase

在關係模型中 數據結構表示爲一個二維表 一個關係就是一個二維表(但不是任意一個二維表都能表示一個關係),二維表就是關係名錶中的第一行一般稱爲屬性名,表中的每個元組和屬性都是不可再分的 且元組的次序是可有可無的

  經常使用的關係術語如:

  記錄  二維表中每一行稱爲一個記錄  即元組

  字段  二維表中每一列稱爲一個字段  即屬性

  域     屬性的取值範圍

 

二者的優缺點

  關係型數據庫

  一、容易理解 存放在數據庫中的數據就是以二維表的形式存儲的

ps  二維表就是有行和列組成的 知道行號和列號就能定位到表中的數據 excel就是二維表

  二、使用方便 基於通用的sql語言使用操做關係型數據庫方便

  三、支持sql 因此能夠進行復雜的查詢

  四、易於維護 豐富的完整性(域完整性 實體完整性 擦找完整性和自定義完整性)

大大下降了數據冗餘 事務的ACID特性保證了數據的一致性

 

 

  五、讀寫性能低

  六、對海量數據的處理不如菲關係型數據庫

  七、分佈式不夠完善

 

  非關係型數據庫

  一、不支持sql 省去了解析sql的步驟 讀寫性能高

  二、基於鍵值對的形式 數據沒有耦合性 擴張性強

  三、能夠實現數據的分佈式處理

  四、適用於海量數據的處理

  

  五、持久化性能低

  六、由於沒有事務 因此數據安全性不高

  七、出道時間短 功能沒有關係型數據庫完善

 

  關係型數據庫的不足

  不擅長處理:

  一、大量數據的寫入處理

  二、爲有數據更新的表作索引或表結構(schema)變動

  三、字段不固定時應用

  四、對簡單查詢須要快速返回結果的處理

-----大量數據的寫入處理

  讀寫集中在一個數據庫上讓數據庫不堪重負 大部分網站已使用主從複製技術實現讀寫分離 以提升讀寫性能和毒庫的可擴展性

  因此在進行大量數據操做時 會使用數據庫主從模式 數據的寫入有主數據庫負責 數據的讀入由從數據庫負責 能夠比較簡單的經過增長從數據來實現規模化 可是數據的寫入卻徹底沒有簡單的方法來解決規模化問題

  第一 要想將數據的寫入規模化 能夠考慮把主數據庫從一臺增長到2臺 做爲互相關聯複製的二元主數據庫使用 倒是這樣能夠把每臺主數據庫的複合減小一半 可是更新處理會發生衝突 可能會形成數據的不一致 爲了不這樣的問題 須要把對每一個表的請求分別分配給合適的主數據庫來處理

 

  第二 能夠考慮把數據庫分割開來 分別放在不一樣的數據庫服務器上 好比講不一樣的表放在不一樣的數據庫服務器上 數據庫分割能夠減小每臺數據庫服務器上的數據量 一邊減小影片io的輸入 輸出處理 實現內存上的高速處理 可是因爲分別儲存不一樣服務器上的表之間沒法進行join處理 數據庫分割的時候就須要預先考慮這些問題 數據庫分割以後 若是必定要進行Join處理 就必需要在程序中進行關聯 這是很是困難的

爲有數據更新的表作索引或表結構變動

  在使用關係型數據庫時 爲了加快查詢速度須要建立索引 爲了增長必要的字段就必定要改變表結構爲了進行這項處理 須要對錶進行共享鎖定 這期間數據變動 更新 插入 刪除等都是沒法進行的

若是須要進行一些耗時操做 例如爲數據量比較大的表建立索引或是變動其表結構 就須要特別注意 長時間內數據可能沒法進行更新

字段不固定的應用

  若是字段不固定 利用關係型數據庫也是比較困難的 有人會說 須要的時候價格字段就能夠了 這種方法不是不能夠 可是實際運用中每次都進行反覆的表結構變動是很是痛苦的 你也能夠預先設定大量的預備字段 可是這樣的話 時間一長很容易弄不清楚字段和數據的對應狀態 即哪一個字段保存有哪些數據

對簡單查詢須要快速返回結果的處理 (沒有複雜的查詢條件)

  這一點稱不上是缺點 但無論怎樣 關係型數據庫並不擅長對簡單的查詢快速返回結果 由於關係型數據庫是使用專門的sql語言進行數據讀取的 他須要對sql語言進行解析 同時還要對錶的鎖定和解鎖等這樣的額外開銷 這裏並非說關係型數據庫的速度太慢 而只是想告訴你們若但願對簡單查詢進行告訴處理 則沒有必要非食用關係型數據庫不可

 

 

Mysql數據庫的特色

  版本分:社區(自由免費下載)和企業(不能自由下載 收費 官方提供了完整的技術支持 適合對數據庫要求比較高的企業用戶)

  優勢

    一、運行速度快 mysql體積小 命令執行速度快

    二、食用成本低 mysql免費開源(大多數人)

    三、易學易用 相對來講(設置 管理)

    四、可移植性強 可以運行在windows linux unix 等多系統中

    

數據庫管理系統和數據庫系統 

  數據庫管理系統DataBase Management System (DBMS)

  數據庫系統DataBase System (DBS)數據庫和數據庫管理員

  數據庫管理員DataBase Administrator(DBA)建立 監控 維護數據庫的專業管理人員

  數據庫DataBase

 

ps 關係型數據庫管理系統(Relational DataBase Management System)

 

數據庫以表格形式出現 

每行爲各類記錄名稱

沒列爲各類記錄所對應的數據域

許多的行和列組成一張表單

若干的表單組成database

 

數據庫中相關的名詞

數據庫 數據表的集合

數據表 數據的集合

行 一行數據(元組或記錄)橫向

列 一列數據(字段)縱向

主鍵(Primary key):惟一標示數據的字段

外鍵(Foreign key):關聯兩個表之間關係的字段

標識列是自增列

主鍵是惟一

複合主鍵

  所謂的複合主鍵 就是指你表的主鍵含有一個以上的字段組成 不適用無業務含義的自增id做爲主鍵

  create table test(

id number

value varchar(10),

primary key(name,id))

 

上面的name和id字段組合起來就是你test表的複合主鍵 他的出現是由於你的name字段可能會出現重名 因此要加上ID字段這樣就能夠保住你記錄的惟一性 通常狀況下 主鍵的字段長度和字段數目越少越好

 

其實「主鍵是惟一的全部」這句話是有歧義的 在表中建立了一個ID字段 自動增加 並設爲主鍵 這個是沒有問題的 由於主鍵是惟一的索引 ID自動增加保住了惟一性 能夠

可是咱們再建立一個字段name 類型爲varchar 也設置爲主鍵 你會發現 在表的多行中 你是能夠填寫相同的name值的 這豈不是有違 主鍵是惟一的索引 !

當表中只有一個主鍵時!他是惟一的索引 當表中有多個主鍵時 稱爲複合主鍵 複合主鍵聯合保證惟一索引

爲何自增加ID已經能夠做爲惟一標識的主鍵 爲啥還須要複合主鍵呢 由於 並非全部的表都要有ID這個字段 好比 咱們建一個學生表 沒有惟一能標識學生的ID 怎麼辦呢 學生的名字 年齡 班級 均可能重複 沒法使用單個字段來惟一標識 這時 咱們能夠將多個字段設置爲主鍵 造成複合主鍵 這多個字段聯合標識惟一性 其中 某幾個主鍵字段值出現重複是沒有問題的 只要不是有多條記錄的全部主鍵值徹底同樣 就不算重複

 

數據完整性 

  存儲在數據庫中的全部數據值均正確的狀態 若是數據庫中存儲有不正確的數據值 則該數據庫稱爲已喪失數據完整性

組成部分

  一、實體完整性(Entity Integrity)

  二、域完整性(Domain Integrity)

  三、參照完整性(Referential Integrity)

  四、用戶自定義完整性(User Defined Integrity)

相關文章
相關標籤/搜索