MySQL8.0資料庫基礎教程(二)-理解"關係"

来源:https://www.cnblogs.com/JavaEdge/archive/2020/02/15/12310482.html

1 SQL 的哲學 形如 Linux 哲學一切都是文件,在 SQL 領域也有這樣一條至理名言 2 關係資料庫 所謂關係資料庫(Relational database)是創建在關係模型基礎上的資料庫,藉助於集合代數等數學概念和方法來處理資料庫中的數據。 現實世界中的各種實體以及實體之間的各種聯繫均用關 ...


1 SQL 的哲學

形如 Linux 哲學一切都是文件,在 SQL 領域也有這樣一條至理名言

一切都是關係

2 關係資料庫

所謂關係資料庫(Relational database)是創建在關係模型基礎上的資料庫,藉助於集合代數等數學概念和方法來處理資料庫中的數據。

現實世界中的各種實體以及實體之間的各種聯繫均用關係模型表示。現如今雖然對此模型有一些批評意見,但它還是數據存儲的傳統標準。標準數據查詢語言SQL就是一種基於關係資料庫的語言,這種語言執行對關係資料庫中數據的檢索和操作。

關係模型由關係數據結構、關係操作集合、關係完整性約束三部分組成。

2.1 數據結構

  • 表(關係Relation)
    以列(值組Tuple)和行(屬性Attribute)的形式組織起來的數據的集合。一個資料庫包括一個或多個表(關係Relation)。例如,可能有一個有關作者信息的名為authors的表(關係Relation)。每行(屬性Attribute)都包含特定類型的信息,如作者的姓氏。每列(值組Tuple)都包含有關特定作者的所有信息:姓、名、住址等等。在關係型資料庫當中一個表(關係Relation)就是一個關係,一個關係資料庫可以包含多個表(關係Relation)

  • 也稱為記錄(Record),代表了關係中的單個實體。

  • 也稱為欄位(Field),表示實體的某個屬性。表中的每個列都有一個對應的數據類型,常見的數據類型包括字元類型、數字類型、日期時間類型等。

    2.2 操作集合

    關係模塊中常用的操作包括:
  • 增加(Create)
  • 查詢(Retrieve)
  • 更新(Update)
  • 刪除(Delete)

其中,使用最多、也最複雜的操作就是數據查詢,具體來說包括

  • 選擇(Selection)
  • 投影(Projection)
  • 並集(Union)
  • 交集(Intersection)
  • 差集(exception)
  • 笛卡兒積(Cartesian product)
  • ...

2.3 完整性約束

完整性約束包括

2.3.1 實體完整性(Entity integrity)

實體完整性(是關係模型中資料庫完整性三項規則的其中之一。實體完整性這項規則要求每個數據表都必須有主鍵,而作為主鍵的所有欄位,其屬性必須是獨一及非空值。

在關係資料庫中,唯一標識每一行數據的欄位稱為主鍵(Primary Key),主鍵欄位不能為空。每個表有且只能有一個主鍵。

2.3.2 參照完整性

又稱引用完整性,是數據的屬性,用以表明引用的有效。參照的完整性不允許關係中有不存在的實體引用。參照完整性與實體完整性二者,皆是關係模型必須滿足的完整性約束條件,其目的在於保證數據的一致性。

外鍵的參照完整性。

  • 外鍵(Foreign Key)代表了兩個表之間的關聯關係
    比如員工屬於某個部門;因此員工表中存在部門編號欄位,引用了部門表中的部門編號欄位。對於外鍵引用,被引用的數據必須存在,員工不可能屬於一個不存在的部門;刪除某個部門之前,也需要對部門中的員工進行相應的處理。

2.3.3 用戶定義完整性

基於業務需要自定義的約束。

  • 非空約束(NOT NULL)
    確保了相應的欄位不會出現空值,例如員工一定要有姓名

  • 唯一約束(UNIQUE)
    用於確保欄位中的值不會重覆,每個員工的電子郵箱必須唯一

  • 檢查約束(CHECK)
    可以定義更多的業務規則,例如,薪水必須大於 0 ,字元必須大寫等
  • 預設值(DEFAULT)
    用於向欄位中插入預設的數據。

MySQL 中只有 InnoDB 存儲引擎支持外鍵約束;MySQL 8.0.16 增加了對檢查約束的支持。因此我們強大的 MySQL 支持以上所有約束。

從 MySQL 5.5 開始預設使用 InnoDB 存儲引擎,支持事務處理(ACID)、行級鎖定、故障恢復、多版本併發控制(MVCC)以及外鍵約束等

3 SQL:面向集合編程

3.1 語法特性

SQL 是一種聲明性的編程語言,語法接近於自然語言(英語)。通過幾個簡單的英文單詞,例如 SELECT、INSERT、UPDATE、CREATE、DROP 等,完成大部分的資料庫操作。

  • 簡單的查詢示例

    可以看出,SQL 簡單直觀。

  • 以上查詢中的 SELECT、FROM 等稱為關鍵字(也稱為子句),一般大寫
  • 表名、列名等內容一般小寫
  • 分號(;)表示語句的結束

SQL 語句不區分大小寫,但是遵循一定的規則可以讓代碼更容易閱讀。

SQL 是一種聲明式的語言,聲明式語言的主要思想是告訴電腦想要什麼結果(what),但不指定具體怎麼做。這類語言還包括 HTML、正則表達式以及函數式編程等。

3.2 面向集合

對於 SQL 語句而言,它所操作的對象是一個集合(表),操作的結果也是一個集合(表)。例如以下查詢:

SELECT emp_id, emp_name, salary
  FROM employee;

其中 employee 是一個表,它是該語句查詢的對象;同時,查詢的結果也是一個表。所以,我們可以繼續擴展該查詢:

SELECT emp_id, emp_name, salary
  FROM (
       SELECT emp_id, emp_name, salary
         FROM employee
       ) dt;

我們將括弧中的查詢結果(取名為 dt)作為輸入值,傳遞給了外面的查詢;最終整個語句的結果仍然是一個表。

SQL 中的查詢可以完成各種數據操作,例如過濾轉換、分組彙總、排序顯示等;但是它們本質上都是針對錶的操作,結果也是表。

不僅僅是查詢語句,SQL 中的插入、更新和刪除都以集合為操作對象。我們再看一個插入數據的示例:

CREATE TABLE t(id INTEGER);

-- 適用於 MySQL、SQL Server 以及 PostgreSQL
INSERT INTO t(id)
VALUES (1), (2), (3);

我們首先使用 CREATE TABLE 語句創建了一個表,然後使用 INSERT INTO 語句插入數據。在執行插入操作之前,會在記憶體中創建一個包含 3 條數據的臨時集合(表),然後將該集合插入目標表中。由於我們通常一次插入一條數據,以為是按照數據行進行插入;實際上,一條數據也是一個集合,只不過它只有一個元素而已。

UNION ALL 是 SQL 中的並集運算,用於將兩個集合組成一個更大的集合。此外,SQL 還支持交集運算(INTERSECT)、差集運算(EXCEPT)以及笛卡兒積(Cartesian product)

4 資料庫案例

包含 3 個表:員工表(employee)、部門表(department)和職位表(job)。

  • 結構圖,也稱為實體-關係圖(Entity-Relational Diagram)

    5 總結

    關係模型中定義了一個簡單的數據結構,即關係(表),用於存儲數據。SQL 是關係資料庫的通用標準語言,通過聲明的方式執行數據定義、數據操作、訪問控制等。
    記住,對於 SQL,一切都是關係(表)。

參考


您的分享是我們最大的動力!

更多相關文章
  • RedHat7安裝NetCore環境併發布網站 1.註冊Microsoft簽名密鑰並添加Microsoft產品提要,每台機器只需註冊一次 執行下麵的命令即可 rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsof ...
  • 學習劉鐵猛老師《C#語言入門詳解》視頻,針對其中重點知識點進行總結。 1、什麼是類型? 類型又稱為數據類型(Data Type),數據類型在數據結構中的定義是一個值的集合以及定義在這個值集上的一組操作。 可以簡單理解為數據在記憶體中存儲的“型號”;小記憶體容納大尺寸數據會丟失精準度,發生錯誤;而大記憶體容 ...
  • 在WPF用戶界面中,繪製2D圖形內容的最簡單方法是使用形狀(shape)——專門用於表示簡單的直線、橢圓、矩形以及多變形的一些類。從技術角度看,形狀就是所謂的繪圖圖元(primitive)。可組合這些基本元素來創建更複雜的圖形。 關於WPF中形狀的重要細節是,它們都繼承自FrameworkEleme ...
  • Blend 修改TreeViewItem樣式 1、用Blend for Visual Studio 2019 新建Wpf項目,拖動一個TreeView控制項到Grid上 2、在繪圖視窗選中TreeViewItem,右鍵編輯模版 編輯副本 3、繪製水平、垂直虛線( "參考博文" ) 在TreeViewI ...
  • ASPNetCore 發佈到IIS 準備工作 1.1. 安裝IIS。(具體操作不再說明) 安裝成功後再瀏覽器輸入localhost得到的頁面如下 1.2. 安裝dotnet-hosting-2.2.2-win.exe安裝成功後在IIS 中可以看到如下兩個程式 這兩個程式對應得NetCore的版本不一 ...
  • 1.Ctrl+s:快速保存代碼 一定要記得隨時隨地用 Ctrl+s 來保存我們的代碼哦!!!不然等到電腦關機或者是使用的Eclipse突然閃退就欲哭無淚了。此時腦海裡就突然出現了嗶嗶嗶的畫面~ 2.Alt+/:自動補全代碼或者提示代碼後半部分 牆裂推薦大家使用啊,真的是超級好用了。 給大家舉一個例子 ...
  • 在看 apue 第 19 章偽終端第 6 節使用 pty 程式時,發現“檢查長時間運行程式的輸出”這一部分內容的實際運行結果,與書上所說有出入。 於是展開一番研究,最終發現是書上講的有問題,現在摘出來讓大家評評理。 先上代碼 pty.c pty_fun.c 這是書上標準的 pty 程式,簡單說起來就 ...
  • 背景介紹 我們在工作中難免會寫一些重覆性的代碼,所以需要我們具備一定的抽象能力,比如把共同的邏輯抽取到抽象類中,也可以通過一些工具類來避免冗餘代碼 今天這篇文章就是把一個調用服務的重試功能抽取出一個工具類,以備復用。這裡為了方便介紹,把調用服務簡化成方法的調用,被調用的 foo 方法如下: ~~~ ...
一周排行
  • 微信公眾號dotnet跨平臺2020年初做的一個關於中國.NET開發者調查收到了開發者近 1400 條回覆。這份調查報告涵蓋了開發者工具鏈的所有部分,包括編程語言、應用架構、應用伺服器、運行時平臺、框架技術、框架配置、IDE、.NET/.NET Core 發行版部署模式、構建工具和Kubernete... ...
  • Winform控制項的雙緩衝。控制項的雙緩衝屬性是隱藏的,可以通過反射改變其屬性值。 lv.GetType().GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(lv, true, ...
  • 1. 需求 上圖這種包含多選(CheckBox)和單選(RadioButton)的菜單十分常見,可是在WPF中只提供了多選的MenuItem。順便一提,要使MenuItem可以多選,只需要將MenuItem的 屬性設置為True: 不知出於何種考慮,WPF沒有為MenuItem提供單選的功能。為了在 ...
  • gRPC的結構 在我們搭建gRPC通信系統之前,首先需要知道gRPC的結構組成。 首先,需要一個server(伺服器),它用來接收和處理請求,然後返迴響應。 既然有server,那麼肯定有client(客戶端),client的作用就是向server發送請求,具體就是生成一個請求,然後把它發送到ser ...
  • 區別 OpenId: Authentication :認證 Oauth: Aurhorize :授權 輸入賬號密碼,QQ確認輸入了正確的賬號密碼可以登錄 認證 下麵需要勾選的覆選框(獲取昵稱、頭像、性別) 授權 OpenID 當你需要訪問A網站的時候,A網站要求你輸入你的OpenId,即可跳轉到你的 ...
  • 前言 預計是通過三篇來將清楚asp.net core 3.x中的授權:1、基本概念介紹;2、asp.net core 3.x中授權的預設流程;3、擴展。 在完全沒有概念的情況下無論是看官方文檔還是源碼都暈乎乎的,希望本文能幫到你。不過我也是看源碼結合官方文檔看的,可能有些地方理解不對,所以只作為參考 ...
  • 簡介 基於生產者消費者模式,我們可以開發出線程安全的非同步消息隊列。 知識儲備 什麼是生產者消費者模式? 為了方便理解,我們暫時將它理解為垃圾的產生到結束的過程。 簡單來說,多住戶產生垃圾(生產者)將垃圾投遞到全小區唯一一個垃圾桶(單隊列),環衛將垃圾桶中的垃圾進行處理(消費者)。就是一個生產者消費者 ...
  • 很多時候,需要對類中的方法進行一些測試,來判斷是否能按要求輸出預期的結果。 C#提供了快速創建單元測試的方法,但單元測試不僅速度慢不方便,大量的單元測試還會拖慢項目的啟動速度。 所以決定自己搞個方便的測試用例。 控制台一句話調用。 測試用例.註冊並Print(EnumEx.Name); 結果畫面: ...
  • 常成員函數不能改變數據成員的值,例如定義坐標類Coordinate,成員函數changeX():void Coordinate::changeX(){ x = 10;}雖然changeX()沒有參數,但是它隱含一個參數——this指針:void Coordinate::changeX(Coordin... ...
  • 因為新冠肺炎疫情,診所還沒復工。這是在家用手機敲的,代碼顯示有問題。等復工以後在電腦上改,各位先湊和看吧。 支持向量機(Support Vector Machine, SVM)是一種基於統計學習的模式識別的分類方法,主要用於模式識別。所謂支持向量指的是在分割區域邊緣的訓練樣本點,機是指演算法。就是要找 ...
x