MySQL 數據庫基礎概念

一、什么是數據庫?

數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。

每個數據庫都有一個或多個不同的 API 用于創建,訪問,管理,搜索和復制所保存的數據。

我們也可以將數據存儲在文件中,但是在文件中讀寫數據速度相對較慢。

所以,現在我們使用關系型數據庫管理系統(RDBMS)來存儲和管理大數據量。所謂的關系型數據庫,是建立在關系模型基礎上的數據庫,借助于集合代數等數學概念和方法來處理數據庫中的數據。

RDBMS 即關系數據庫管理系統(Relational Database Management System)的特點:

  • 1.數據以表格的形式出現
  • 2.每行為各種記錄名稱
  • 3.每列為記錄名稱所對應的數據域
  • 4.許多的行和列組成一張表單
  • 5.若干的表單組成database

二、RDBMS 術語

在我們開始學習MySQL 數據庫前,讓我們先了解下RDBMS的一些術語:

  • 數據庫:?數據庫是一些關聯表的集合。
  • 數據表:?表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
  • 列:?一列(數據元素) 包含了相同類型的數據, 例如郵政編碼的數據。
  • 行:一行(元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
  • 冗余:存儲兩倍數據,冗余降低了性能,但提高了數據的安全性。
  • 主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢數據。
  • 外鍵:外鍵用于關聯兩個表。
  • 復合鍵:復合鍵(組合鍵)將多個列作為一個索引鍵,一般用于復合索引。
  • 索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。類似于書籍的目錄。
  • 參照完整性:?參照的完整性要求關系中不允許引用不存在的實體。與實體完整性是關系模型必須滿足的完整性約束條件,目的是保證數據的一致性。

MySQL 為關系型數據庫(Relational Database Management System), 這種所謂的"關系型"可以理解為"表格"的概念, 一個關系型數據庫由一個或數個表格組成,

  • 列(col): 具有相同數據類型的數據的集合;
  • 行(row): 每一行用來描述某條記錄的具體信息;
  • 值(value): 行的具體信息, 每個值必須與該列的數據類型相同;
  • 鍵(key): 鍵的值在當前列中具有唯一性。

三、基礎概念

[1] 關系模式 對關系的邏輯結構和特征的描述。

[2] 關系代數 以關系作為運算對象的代數系統。在數據庫中用代數運算來定義關系查詢的一種形式化語言。

[3] 數據冗余 同一或同一批數據在同一存儲設備或同一系統中多處出現,容易造成數據變更時的不一致。

[4] 元組 與關系對應的二維表中的行。相當于數據文件中的記錄。

[5] 第二范式 每一個非主屬性完全函數依賴于鍵的關系模式。

[6] 第一范式 每個屬性均不能再分解的關系模式。它是關系模式最基本的規范形式。

[7] 主屬性 在關系中能夠唯一地標識一個元組的屬性組中的諸屬性。

[8] 函數依賴 如果一部分屬性的值由另外一部分屬性的值決定,則稱該部分屬性函數依賴于另一部分屬性。例如基本工資額函數依賴于工資級別。

[9] 第三范式 每一個非主屬性既不存在對鍵的部分函數依賴也不存在對鍵的傳遞函數依賴的關系模式。

[10] BC范式 每一個函數依賴的決定因素中均含有鍵的關系模式。

[11] 數據庫設計 對于一個給定的應用環境,構造最優的數據庫模式。建立數據庫及其應用系統,使之能夠有效地存儲和管理數據滿足各種用戶的應用需求。

[12] 關系演算 以一階謂詞演算為基礎定義的一種抽象的關系查詢語言。

四、函數依賴

在數據庫設計和規范化中,函數依賴是一個核心概念。它用于描述關系模式(即表結構)中屬性之間的依賴關系,幫助我們理解數據的完整性和冗余性,從而指導我們如何優化數據庫設計。

1.函數依賴的基本定義

假設有一個關系模式 R,其中包含一組屬性集合 U。如果對于 R 的所有可能的關系實例,只要兩個元組在屬性集 X 上的值相同,那么它們在屬性集 Y 上的值也必然相同,我們就說 X 函數決定 Y,記作 X -> Y。這里,X 是決定因子,Y 是被決定的屬性或屬性集。

例如,在一個學生信息表中,如果有屬性 StudentIDNameMajor,我們可以有函數依賴 StudentID -> NameStudentID -> Major,因為每個學生的學號決定了其名字和專業。

2.函數依賴的類型

  • 平凡函數依賴:如果 YX 的子集,則 X -> Y 稱為平凡函數依賴。

  • 非平凡函數依賴:如果 Y 不是 X 的子集,則 X -> Y 秢為非平凡函數依賴。

  • 部分函數依賴:如果 X -> Y,但存在 X 的真子集 Z 使得 Z -> Y,則稱 YX 部分函數依賴。

  • 完全函數依賴:如果 X -> Y,且不存在 X 的真子集 Z 使得 Z -> Y,則稱 YX 完全函數依賴。

3.函數依賴的性質

  • 自反律:如果 YX 的子集,則 X -> Y 成立。

  • 增廣律:如果 X -> Y,則對于任何屬性集 Z,都有 XZ -> YZ

  • 傳遞律:如果 X -> YY -> Z,則 X -> Z

函數依賴是數據庫規范化理論的基礎,通過理解和應用這些規則,可以消除數據冗余,提高數據的一致性和完整性,從而構建更高效、更可靠的數據庫系統。

五、自然連接

自然連接(Natural Join)是一種特殊的數據庫操作,主要用于合并兩個具有公共屬性的關系(表)。它是SQL中最常見的連接類型之一,特別適用于當兩個表在某些列上擁有相同的屬性名時進行數據整合。

1.自然連接的特點:

  1. 自動匹配列名:自然連接會自動識別兩個表之間同名的列,并基于這些列進行連接。如果兩個表沒有共同的列,自然連接的結果將為空。

  2. 內連接類型:自然連接本質上是一種內連接(INNER JOIN),意味著只有當兩個表中的記錄在共同列上有匹配時,才會出現在結果集中。不匹配的記錄會被排除。

  3. 隱式條件:與使用顯式ON子句的JOIN不同,自然連接不需要指定連接條件,因為它會默認使用所有同名的列作為連接鍵。

2.SQL語法示例:

假設有兩個表 EmployeesDepartments,它們都有一個名為 DepartmentID 的列。執行自然連接如下:

Sql

SELECT *
FROM Employees
NATURAL JOIN Departments;

這將返回一個新的表,其中包含了 EmployeesDepartments 表中 DepartmentID 相匹配的所有記錄。結果集中的每一行都表示一個員工及其所在部門的信息。

3.注意事項:

  • 在使用自然連接時,應確保兩個表中的同名列具有相同的含義和數據類型,否則可能會導致錯誤或意外的結果。

  • 如果兩個表中有多個同名列,自然連接會基于所有同名列進行匹配,這可能不是預期的行為。在需要精確控制連接條件的情況下,使用顯式的INNER JOIN語句并指定ON子句通常更為合適。

自然連接簡化了查詢編寫過程,特別是在處理具有明顯共享屬性的表時,但它也可能引入復雜性和不確定性,尤其是在大型數據庫系統中。因此,根據具體場景選擇合適的連接類型非常重要。

六、引用關系

引用關系(Referential Relationship)在數據庫設計中,尤其是關系型數據庫中,指的是實體之間的一種聯系,它確保了數據的完整性和一致性。這種關系通常是通過外鍵約束實現的,外鍵鏈接一個表的數據到另一個表的主鍵,從而建立起表與表之間的關聯。

1.主要組成部分:

  1. 主鍵(Primary Key):在關系型數據庫中,每個表至少有一個主鍵,它唯一標識表中的每一條記錄。主鍵可以由一個或多個字段組成,確保數據行的唯一性。

  2. 外鍵(Foreign Key):外鍵是參照另一個表主鍵的一個或多個字段,用于建立兩個表之間的鏈接。通過外鍵,一個表(子表)的某條記錄可以指向另一個表(父表)中的某條記錄。

2.引用關系的作用:

  • 數據完整性:引用關系確保了數據庫中數據的一致性和完整性。例如,如果一個表中的記錄被刪除,那么所有引用該記錄的其他表中的相關記錄要么也被刪除(級聯刪除),要么保持不變(限制刪除)以避免出現孤兒記錄。

  • 導航和查詢:引用關系允許從一個表的數據輕松導航到另一個表的相關數據,這對于復雜的查詢和報告非常有用。

3.實現引用關系:

在創建數據庫表時,可以通過定義外鍵約束來實現引用關系。例如,在SQL中,可以這樣定義:

Sql

CREATE TABLE Orders (OrderID int PRIMARY KEY,CustomerID int,OrderDate date,FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);

在這個例子中,Orders 表的 CustomerID 字段是一個外鍵,它引用了 Customers 表的主鍵 CustomerID。這意味著 Orders 表中的每一個 CustomerID 值必須在 Customers 表中找到對應的值。

引用關系是關系型數據庫設計的核心原則之一,它有助于維護數據的邏輯結構和業務規則,確保數據在不同表之間的一致性和相關性。


七、MySQL數據庫

MySQL 是一個關系型數據庫管理系統,由瑞典 MySQL AB 公司開發,目前屬于 Oracle 公司。MySQL 是一種關聯數據庫管理系統,關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。

  • MySQL 是開源的,目前隸屬于 Oracle 旗下產品。
  • MySQL 支持大型的數據庫。可以處理擁有上千萬條記錄的大型數據庫。
  • MySQL 使用標準的 SQL 數據語言形式。
  • MySQL 可以運行于多個系統上,并且支持多種語言。這些編程語言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  • MySQL 對 PHP 有很好的支持,PHP 是很適合用于 Web 程序開發。
  • MySQL 支持大型數據庫,支持 5000 萬條記錄的數據倉庫,32 位系統表文件最大可支持 4GB,64 位系統支持最大的表文件為8TB。
  • MySQL 是可以定制的,采用了 GPL 協議,你可以修改源碼來開發自己的 MySQL 系統

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44623.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44623.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44623.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

淺析Kafka Streams中KTable.aggregate()方法的使用

KTable.aggregate() 方法是 Apache Kafka Streams API 中用于對流數據進行狀態化聚合的核心方法之一。這個方法允許你根據一個鍵值&#xff08;通常是<K,V>類型&#xff09;的流數據&#xff0c;應用一個初始值和一個聚合函數&#xff0c;來累積和更新一個狀態&#xff0…

MSPM0G3507(三十六)——超聲波PID控制小車固定距離

效果圖&#xff1a; 波形圖軟件是VOFA&#xff0c;B站有教程 &#xff0c;雖然有缺點但是非常簡單。 視頻效果&#xff1a; PID控制距離 之前發過只有超聲波測距的代碼&#xff0c;MSPM0G3507&#xff08;三十二&#xff09;——超聲波模塊移植代碼-CSDN博客 SYSCFG配置&#…

Ubuntu下如何設置程序include搜索路徑及鏈接路徑

添加庫的include及lib路徑 linux下系統默認路徑為 /usr/include, /usr/local/include, gcc在編譯程序時會按照當前目錄路徑->系統默認路徑->系統環境變量的路徑方式去查找&#xff0c;所以當我們想調用的庫未安裝在系統默認路徑時&#xff0c;我們可以通過手動添加環境變…

數據壓縮的藝術:Kylin Cube設計中的自動壓縮特性

數據壓縮的藝術&#xff1a;Kylin Cube設計中的自動壓縮特性 在大數據的浩瀚宇宙中&#xff0c;Apache Kylin以其卓越的數據立方體&#xff08;Cube&#xff09;技術&#xff0c;為企業提供快速的多維數據分析能力。隨著數據量的不斷增長&#xff0c;存儲效率成為了一個關鍵問…

用友NC Cloud blobRefClassSearch FastJson反序列化RCE漏洞復現

0x01 產品簡介 用友 NC Cloud 是一種商業級的企業資源規劃云平臺,為企業提供全面的管理解決方案,包括財務管理、采購管理、銷售管理、人力資源管理等功能,實現企業的數字化轉型和業務流程優化。 0x02 漏洞概述 用友 NC Cloud blobRefClassSearch 接口處存在FastJson反序列…

開源PHP論壇HadSky本地部署與配置公網地址實現遠程訪問

文章目錄 前言1. 網站搭建1.1 網頁下載和安裝1.2 網頁測試1.3 cpolar的安裝和注冊 2. 本地網頁發布2.1 Cpolar臨時數據隧道2.2 Cpolar穩定隧道&#xff08;云端設置&#xff09;2.3 Cpolar穩定隧道&#xff08;本地設置&#xff09;2.4 公網訪問測試 總結 前言 今天和大家分享…

idea啟動ssm項目詳細教程

前言 今天碰到一個ssm的上古項目&#xff0c;項目沒有使用內置的tomcat作為服務器容器&#xff0c;這個時候就需要自己單獨設置tomcat容器。這讓我想起了我剛入行時被外置tomcat配置支配的恐懼。現在我打算記錄一下配置的過程&#xff0c;希望對后面的小伙伴有所幫助吧。 要求…

什么是計算機數據結構的字典

字典數據結構在計算機編程領域中是一個非常重要且常用的數據結構。它也被稱為關聯數組、哈希表或映射&#xff08;Map&#xff09;&#xff0c;在不同編程語言中有不同的實現和稱呼&#xff0c;但其核心概念和用途大致相同。 字典數據結構是一種鍵值對&#xff08;key-value p…

Linux 軟件工具安裝

Linux 軟件包管理器 yum 什么是軟件包 在Linux下安裝軟件&#xff0c; 一個通常的辦法是下載到程序的源代碼&#xff0c; 并進行編譯&#xff0c;得到可執行程序。 但是這樣太麻煩了&#xff0c; 于是有些人把一些常用的軟件提前編譯好&#xff0c;做成軟件包(可以理解成wind…

動態路由的基本概念

動態路由的基本概念 什么是動態路由&#xff1f; 網絡中的路由器彼此之間相互通信&#xff0c;傳遞各自的路由信息&#xff0c;利用收到的路由信息來更新和維護自己的路由表的過程。 基于某種路由協議實現&#xff08;6大協議&#xff09;。 動態路由的特點&#xff1a; 減…

SpringBoot3.3.0升級方案

本文介紹了由SpringBoot2升級到SpringBoot3.3.0升級方案&#xff0c;新版本的升級可以解決舊版本存在的部分漏洞問題。 一、jdk17下載安裝 1、下載 官網下載地址 Java Archive Downloads - Java SE 17 Jdk17下載后&#xff0c;可不設置系統變量java_home&#xff0c;僅在id…

開發技術-Java BigDecimal 精度丟失問題

文章目錄 1. 背景2. 方法3. 總結 1. 背景 昨天和小伙伴排查一個問題時&#xff0c;發現一個 BigDecimal 精度丟失的問題&#xff0c;即 double a 1.1;BigDecimal ba new BigDecimal(a).subtract(new BigDecimal(0.1));System.out.println(ba);輸出&#xff1a; 1.000000000…

構建自定義Tensorflow鏡像時用到的鏈接地址整理

NVIDIA相關&#xff1a; NVIDIA CUDA鏡像的docker hub&#xff1a;https://hub.docker.com/r/nvidia/cuda/tags?page&page_size&ordering&name12.4.1NVIDIA 構建的Tensorflow鏡像包&#xff1a;https://docs.nvidia.com/deeplearning/frameworks/tensorflow-rele…

項目屬性的精粹:Gradle中配置項目屬性的全面指南

項目屬性的精粹&#xff1a;Gradle中配置項目屬性的全面指南 在構建自動化的宏偉藍圖中&#xff0c;Gradle以其靈活的項目屬性配置脫穎而出。項目屬性是構建過程中可配置的參數&#xff0c;它們可以控制構建行為、定義條件邏輯&#xff0c;甚至影響依賴解析。本文將深入探討如…

Vue3 使用 Vue Router 時,prams 傳參失效和報錯問題

Discarded invalid param(s) “id“, “name“, “age“ when navigating 我嘗試使用 prams 傳遞數據 <script setup> import { useRouter } from vue-routerconst router useRouter() const params { id: 1, name: ly, phone: 13246566476, age: 23 } const toDetail…

快速使用BRTR公式出具的大模型Prompt提示語

Role:文章模仿大師 Background: 你是一位文章模仿大師&#xff0c;擅長分析文章風格并進行模仿創作。老板常讓你學習他人文章后進行模仿創作。 Attention: 請專注在文章模仿任務上&#xff0c;提供高質量的輸出。 Profile: Author: 一博Version: 1.0Language: 中文Descri…

半邊數據結構學習

半邊數據結構學習 一、網格數據結構二、半邊數據結構頂點(Vertex)半邊(HalfEdge)面片(Face) 三、OpenMesh 相關代碼拓撲關聯對象遍歷 四、OpenFilpper 相關代碼HoleInfo類孔洞檢測孔洞信息HoleFiller類孔洞補全 一、網格數據結構 對于表面網絡來說&#xff0c;其關鍵在于拓撲&…

【MySQL系列】VARCHAR的底層存儲

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

python-親和數(賽氪OJ)

[題目描述] 古希臘數學家畢達哥拉斯在自然數研究中發現&#xff0c;220 的所有真約數(即不是自身的約數)之和為&#xff1a; 1245101120224455110&#xff1d;284 。 而 284 的所有真約為 1 、 2 、 4 、 71 、 142 &#xff0c;加起來恰好為 220 。人們對這樣的數感到很驚奇&a…

頤養優選元宇宙

頤養優選是一個專注于為中老年人提供高品質養老服務的品牌或平臺。它通常涵蓋了一系列服務和產品&#xff0c;旨在幫助老年人享受健康、舒適、有尊嚴的晚年生活。這些服務可能包括但不限于以下幾個方面&#xff1a; ###健康管理 -**定期體檢**&#xff1a;提供定期的身體健康檢…