數據庫的基礎簡介
一、數據庫的基礎簡介 1、什么是數據庫 什么是數據?
數據是描述事物的符號記錄,可以是數字、文字、圖形、圖像、聲音、語言等,數據有多種形式,它 們都可以經過數字化(以1和0)后存入計算機。
什么是數據庫?
數據庫是存儲數據的倉庫,是長期存放在計算機內、有組織、可共享的大量數據的集合。數據庫中的數據按照一定數據模型組織、描述和存儲,具有較小的冗余度,較高的獨立性和易擴展性,并為各種用戶共享 。
特點總結為如下幾點:
1)數據結構化
2) 數據的共享性高,冗余度低,易擴充
3) 數據獨立性高
4)數據由 DBMS 統一管理和控制(安全性、完整性、并發控制、故障恢復)
解釋:DBMS 數據庫管理系統(能夠操作和管理數據庫的大型軟件)
2、數據庫與文件系統的區別?
文件系統:文件系統是操作系統用于明確存儲設備(常見的是磁盤)或分區上的文件的方法和數據結 構;即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟件機構稱為文件管理 系統,簡稱文件系統。
數據庫系統:數據庫管理系統( )是一種操縱和管理數據庫的大型軟件, 用于建立、使用和維護數據庫,簡稱 DBMS。它對數據庫進行統一的管理和控制,以保證數據庫的安全 性和完整性。
對比區別:
管理對象不同:文件系統的管理對象是文件,并非直接對數據進行管理,不同的數據結構需要使用不同的文件類型進行保存(舉例:txt 文件和 doc 文件不能通過修改文件名完成轉換);而數據庫 直接對數據進行存儲和管理 。
存儲方式不同:文件系統使用不同的文件將數據分類(.doc/.mp4/.jpg)保存在外部存儲上;數 據庫系統使用標準統一的數據類型進行數據保存(字母、數字、符號、時間)。
調用數據的方式不同:文件系統使用不同的軟件打開不同類型的文件;數據庫系統由 DBMS 統一調 用和管理。
數據庫系統的分層:
表示層:數據庫-數據表-記錄(字段)
邏輯層:數據庫的存儲引擎
物理層:數據庫文件(*.sql)
文件系統:
表示層:文件名(文件類型.txt/.jpg …)
邏輯層:文件系統類型(EXT4/EXT3/NFTS/XFS)
物理層:分區塊(數據塊data block)–>磁盤扇區
從數據庫系統的物理層和文件系統的表示層可以看出,數據庫系統的物理層(數據庫文件(*.sql))就是文件系統的表示層信息(文件名),可以認為數據庫系統是運行在文件系統之上的。
數據庫系統的數據調用
數據庫系統調用數據,是直接通過DBMS(數據庫管理系統)調用。
文件系統的數據調用
文件系統調用數據,先需要調用可以打開該文件的程序,通過程序再去調用具體的數據信息。
優缺點總結:
1)由于 DBMS 的存在,用戶不再需要了解數據存儲和其他實現的細節,直接通過 DBMS 就能獲取數據, 為數據的使用帶來極大便利。
2)具有以數據為單位的共享性,具有數據的并發訪問能力。DBMS 保證了在并發訪問時數據的一致性。
3)低延時訪問,典型例子就是線下支付系統的應用,支付規模巨大的時候,數據庫系統的表現遠遠 優于文件系統。
4)能夠較為頻繁的對數據進行修改,在需要頻繁修改數據的場景下,數據庫系統可以依賴 DBMS 來 對數據進行操作且對性能的消耗相比文件系統比較小。
5)對事務的支持。DBMS 支持事務,即一系列對數據的操作集合要么都完成,要么都不完成。在 DBMS 上對數據的各種操作都是原子級的。
3、常見數據庫類型 1)關系型數據庫
關系數據庫是建立在關系模型基礎上的數據庫,借助于集合代數等數學概念和方法來處理數據庫 中的數據?,F實世界中的各種實體以及實體之間的各種聯系均用關系模型來表示。簡單說,關系型數據庫是由多張能互相聯接的二維行列表格組成的數據庫。 關系模型就是指二維表格模型,因而一個關系型數據庫就是由二維表及其之間的聯系組成的一個 數據組織。當前主流的關系型數據庫有 、DB2、 SQL 、 、MySQL、 浪潮 K-DB 等。 實體關系模型簡稱 E-R 模型,是一套數據庫的設計工具,他運用真實世界中事物與關系的觀念, 來解釋數據庫中的抽象的數據架構。實體關系模型利用圖形的方式(實體-關系圖)來表示數據庫的概 念設計,有助于設計過程中的構思及溝通討論。
2)非關系型數據庫 非關系型數據庫
又被稱為 NoSQL(Not Only SQL ),意為不僅僅是 SQL,是一種輕量、開源、 不兼容 SQL 功能的數據庫,對 NoSQL 最普遍的定義是“非關聯型的”,強調 Key-Value 存儲和文檔數據庫的優點,而不是單純地反對 RDBMS(關系型數據庫管理系統)
4、關系型數據庫(MySQL)的特征及組成結構介紹 層次模型
網狀模型
關系模型()
關系模型以二維表結構來表示實體與實體之間的聯系,關系模型的數據結構是一個“二維表框 架”組成的集合。每個二維表又可稱為關系。在關系模型中,操作的對象和結果都是二維表。 關系模型是目前最流行的數據庫模型。支持關系模型的數據庫管理系統稱為關系數據庫管理系 統, 就是一種關系數據庫管理系統。圖所示為一個簡單的關系模型,其中圖(a)所示為關系模 式,圖(b)所示為這兩個關系模型的關系,關系名稱分別為教師關系和課程關系,每個關系均含 3 個 元組,其主碼均為“教師編號”。
在關系模型中基本數據結構就是二維表,不用像層次或網狀那樣的鏈接指針。記錄之間的聯系是 通過不同關系中同名屬性來體現的。例如,要查找“劉晉”老師所上的課程,可以先在教師關系中根 據姓名找到教師編號“”,然后在課程關系中找到“”任課教師編號對應的課程名即 可。通過上述查詢過程,同名屬性教師編號起到了連接兩個關系的紐帶作用。由此可見,關系模型中 的各個關系模式不應當是孤立的,也不是隨意拼湊的一堆二維表,它必須滿足相應的要求。
關系式數據庫的組成結構和名詞解釋 數據以表格的形式出現,每行為單獨的一條記錄,每列為一個單獨的字段,許多的記錄和字段組 成一張表單(table),若干的表單組成庫()
數據庫相關關鍵名詞概念
● 記錄(一條數據)
在數據庫當中,表當中的行稱之為記錄
● 字段(id name …)
在數據庫當中,表當中的列稱之為字段
● MySQL 數據類型
數據類型用于指定特定字段所包含數據的規則,它決定了數據保存在字段里的方式,包括分配給 字段的寬度,以及值是否可以是字母、數字、日期和時間等。任何數據或數據的組合都有對應的數據 類型,用于存儲字母、數字、日期和時間、圖像、二進制數據等。數據類型是數據本身的特征,其特 性被設置到表里的字段。 MySQL 常見基礎數據類型: * 字符串類型(CHAR(0-255 固定長度),(0-255 可變長度)) * 數值類型(INT(整數型)、FLOAT(浮點型)) * 日期和時間類型(DATE(年月日)、TIME(時分秒))
● MySQL 約束類型
約束是一種限制,它通過對表的行或列的數據做出限制,來確保表的數據的完整性、唯一性。
1、主鍵約束 key:主鍵約束相當于唯一約束+非空約束的組合,主鍵約束列不允許重復,也 不允許出現空值。每個表最多只允許一個主鍵,建立主鍵約束可以在列級別創建,也可以在表級別創 建。當創建主鍵的約束時,系統默認會在所在的列和列組合上建立對應的唯一索引。
2、外鍵約束 key:外鍵約束是保證一個或兩個表之間的參照完整性,外鍵是構建于一個表的 兩個字段或是兩個表的兩個字段之間的參照關系。
3、唯一約束 :唯一約束是指定 table 的列或列組合不能重復,保證數據的唯一性。唯一約束不 允許出現重復的值,但是可以為多個 null。同一個表可以有多個唯一約束,多個列組合的約束。在創 建唯一約束時,如果不給唯一約束名稱,就默認和列名相同。唯一約束不僅可以在一個表內創建,而 且可以同時多表創建組合唯一約束。
4、非空約束 not null 與默認值 :非空約束用于確保當前列的值不為空值,非空約束只能出現 在表對象的列上。Null 類型特征:所有的類型的值都可以是 null,包括 int、float 等數據類型
● MySQL 索引
索引是一個單獨的、物理的數據庫結構,它是某個表中一字段或若干字段值的集合。表的存儲由 兩部分組成數據庫系統的基礎是,一部分用來存放數據,另一部分存放索引頁面。通常,索引頁面相對于數據頁面來說小 得多。數據檢索花費的大部分開銷是磁盤讀寫,沒有索引就需要從磁盤上讀表的每一個數據頁,如果 有索引,則只需查找索引頁面就可以了。所以建立合理的索引,就能加速數據的檢索過程。
● MySQL 鎖
數據庫是一個多用戶使用的共享資源。當多個用戶并發地存取數據時,在數據庫中就會產生多個 事務同時存取同一數據的情況。若對并發操作不加控制就可能會讀取和存儲不正確的數據,破壞數據庫的一致性。 加鎖是實現數據庫并發控制的一個非常重要的技術。當事務在對某個數據對象進行操作前,先向 系統發出請求,對其加鎖。加鎖后事務就對該數據對象有了一定的控制,在該事務釋放鎖之前,其他 的事務不能對此數據對象進行更新操作。
● MySQL 的存儲引擎
存儲引擎就是存儲數據,建立索引,更新查詢數據等等技術的實現方式。存儲引擎是基于表的, 而不是基于庫的。所以存儲引擎也可被稱為表類型。, 等數據庫只有一種存儲引擎。 MySQL 提供了插件式的存儲引擎架構。所以 MySQL 存在多種存儲引擎,可以根據需要使用相應引擎, 或者編寫存儲引擎。 :默認引擎、插入和查詢速度較快,支持全文索引,不支持事務、行級鎖和外鍵約束等功能 :支持事務、行級鎖和外鍵約束等功能 :工作在內存中,通過散列字段保存數據,速度快、不能永久保存數據 ……
● 事務()
是并發控制的基本單位。 可以把一系列要執行的操作稱為事務,而事務管理就是管理這些操作要么完全執行,要么完全不 執行 經典案例:銀行轉賬工作,從一個賬號扣款并使另一個賬號增款,這兩個操作要么都執行,要么 都不執行。所以,應該把它們看成一個事務。事務是數據庫維護數據一致性的單位,在每個事務結束 時,都能保持數據一致性。
注意:mysql 中并不是所有的數據引擎都支持事務管理的,只有 支持事務管理。
5、Mysql介紹
MySQL是一個關系型數據庫管理系統,由瑞典 MySQL AB 公司開發,目前屬于 旗下公司。MySQL 最流行的關系型數據庫管理系統,在 WEB 應用方面 MySQL 是最好的 RDBMS ( ,關系數據庫管理系統) 應用軟件之一。
MySQL 是一種關系數據庫管理系統,關系數據庫將數據保存在不同的表中,而不是將所有數據放在一 個大倉庫內,這樣就增加了速度并提高了靈活性。MySQL 所使用的 SQL 語言是用于訪問數據庫的最常 用標準化語言。 關系數據庫管理系統( ,RDBMS),是將數據組織為相關的 行和列的系統,而管理關系數據庫的計算機軟件就是關系數據庫管理系統 。
MySQL數據庫主要用于存儲各類信息數據,例如:員工姓名、身份證ID、商城訂單及金額、銷售業績及報告,學生考試成績、網站帖子、論壇用戶信息、系統報表等等。
MySQL 軟件采用了雙授權政策,它分為社區版和商業版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站數據庫。由于其社區版的性能卓越,搭配 PHP和 可組成良好的開發環境。
關系數據庫管理系統( ,RDBMS),是將數據組織為相關的行和列的系統,而管理關系數據庫的計算機軟件就是關系數據庫管理系統,常用的關系型數據庫軟件有MYSQL、、、SQL 、、DB2等。)
RDBMS數據庫的特點如下:
1、 數據以表格的形式出現;
2、 每行記錄數據的真實內容;
3、 每列記錄數據真實內容的數據域;
4、 無數的行和列組成一張表;
5、 若干的表組成一個數據庫;
目前主流架構LNMP(Linux++MySQL+PHP),MySQL更是得到各位IT運維、DBA的青睞,雖然MySQL數據庫已被公司收購,不過好消息是原來MySQL創始人已獨立出來自己重新開發了數據庫,開源免費,目前越來越多的人開始嘗試使用。數據庫兼容MySQL數據庫所有的功能和相關參數。
MySQL數據庫運行在服務器前,需要選擇啟動的引擎,好比一輛轎車,性能好的發動機會提升轎車的性能,從而啟動、運行更加的高效。同樣MYSQL也有類似發動機引擎,這里稱之為MYSQL引擎。
MYSQL引擎包括:ISAM、、 、、CSV、、、、、Merge、、/NDB等,其中、使用最為廣泛,如下為 BDB 引擎功能的對比:
引擎特性
批量插入的速度
高
高
高
中
非常高
集群索引
不支持
不支持
不支持
支持
不支持
數據緩存
不支持
不支持
支持
支持
不支持
索引緩存
支持
不支持
支持
支持
不支持
數據可壓縮
支持
不支持
不支持
不支持
支持
硬盤空間使用
低
低
NULL
高
非常低
內存使用
低
低
中等
高
低
外鍵支持
不支持
不支持
不支持
支持
不支持
存儲限制
沒有
沒有
有
64TB
沒有
事務安全
不支持
支持
不支持
支持
不支持
鎖機制
表鎖
頁鎖
表鎖
行鎖
行鎖
B樹索引
支持
支持
支持
支持
不支持
哈希索引
不支持
不支持
支持
支持
不支持
全文索引
支持
不支持
不支持
不支持
不支持
性能總結:
MySQL 5.0 之前的默認數據庫引擎,最為常用。擁有較高的插入,查詢速度,但不支持事務;
事務型數據庫的首選引擎,支持ACID事務,ACID包括:原子性()、一致性()、隔離性()、持久性(),一個支持事務()的數據庫,必需要具有這四種特性,否則在執行事務過程無法保證數據的正確性。
.5之后默認引擎為,支持行級鎖定, 支持事物、外鍵等功能。
BDB源自 DB數據庫系統的基礎是,事務型數據庫的另一種選擇,支持 和 等其他事務特性;
所有數據置于內存的存儲引擎,擁有極高的插入,更新和查詢效率。但是會占用和數據量成正比的內存空間。并且其內容會在 MySQL 重新啟動時丟失;
Mysql常用的兩大引擎有和,那他們有什么明顯的區別呢,什么場合使用什么引擎呢?
類型的數據庫表強調的是性能,其執行數度比類型更快,但不提供事務支持,不支持外鍵,如果執行大量的(查詢)操作,是更好的選擇,支持表鎖。
mory所有數據置于內存的存儲引擎,擁有極高的插入,更新和查詢效率。但是會占用和數據量成正比的內存空間。并且其內容會在 MySQL 重新啟動時丟失;
Mysql常用的兩大引擎有和,那他們有什么明顯的區別呢,什么場合使用什么引擎呢?
類型的數據庫表強調的是性能,其執行數度比類型更快,但不提供事務支持,不支持外鍵,如果執行大量的(查詢)操作,是更好的選擇,支持表鎖。
提供事務支持事務、外部鍵、行級鎖等高級數據庫功能,執行大量的或,出于性能方面的考慮,可以考慮使用引擎。