乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MySQL8.0數(shù)據(jù)庫(kù)基礎(chǔ)教程(二)-理解"關(guān)系"

       行者花雕 2022-04-13

      1 SQL 的哲學(xué)

      形如 Linux 哲學(xué)一切都是文件,在 SQL 領(lǐng)域也有這樣一條至理名言

      一切都是關(guān)系

      2 關(guān)系數(shù)據(jù)庫(kù)

      所謂關(guān)系數(shù)據(jù)庫(kù)(Relational database)是創(chuàng)建在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫(kù),借助于集合代數(shù)等數(shù)學(xué)概念和方法來(lái)處理數(shù)據(jù)庫(kù)中的數(shù)據(jù)。

      現(xiàn)實(shí)世界中的各種實(shí)體以及實(shí)體之間的各種聯(lián)系均用關(guān)系模型表示?,F(xiàn)如今雖然對(duì)此模型有一些批評(píng)意見(jiàn),但它還是數(shù)據(jù)存儲(chǔ)的傳統(tǒng)標(biāo)準(zhǔn)。標(biāo)準(zhǔn)數(shù)據(jù)查詢語(yǔ)言SQL就是一種基于關(guān)系數(shù)據(jù)庫(kù)的語(yǔ)言,這種語(yǔ)言執(zhí)行對(duì)關(guān)系數(shù)據(jù)庫(kù)中數(shù)據(jù)的檢索和操作。

      關(guān)系模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合、關(guān)系完整性約束三部分組成。

      2.1 數(shù)據(jù)結(jié)構(gòu)

      • 表(關(guān)系Relation)
        以列(值組Tuple)和行(屬性Attribute)的形式組織起來(lái)的數(shù)據(jù)的集合。一個(gè)數(shù)據(jù)庫(kù)包括一個(gè)或多個(gè)表(關(guān)系Relation)。例如,可能有一個(gè)有關(guān)作者信息的名為authors的表(關(guān)系Relation)。每行(屬性Attribute)都包含特定類型的信息,如作者的姓氏。每列(值組Tuple)都包含有關(guān)特定作者的所有信息:姓、名、住址等等。在關(guān)系型數(shù)據(jù)庫(kù)當(dāng)中一個(gè)表(關(guān)系Relation)就是一個(gè)關(guān)系,一個(gè)關(guān)系數(shù)據(jù)庫(kù)可以包含多個(gè)表(關(guān)系Relation)

      • 也稱為記錄(Record),代表了關(guān)系中的單個(gè)實(shí)體。

      • 也稱為字段(Field),表示實(shí)體的某個(gè)屬性。表中的每個(gè)列都有一個(gè)對(duì)應(yīng)的數(shù)據(jù)類型,常見(jiàn)的數(shù)據(jù)類型包括字符類型、數(shù)字類型、日期時(shí)間類型等。

      2.2 操作集合

      關(guān)系模塊中常用的操作包括:

      • 增加(Create)
      • 查詢(Retrieve)
      • 更新(Update)
      • 刪除(Delete)

      其中,使用最多、也最復(fù)雜的操作就是數(shù)據(jù)查詢,具體來(lái)說(shuō)包括

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

      2.3 完整性約束

      完整性約束包括

      2.3.1 實(shí)體完整性(Entity integrity)

      實(shí)體完整性(是關(guān)系模型中數(shù)據(jù)庫(kù)完整性三項(xiàng)規(guī)則的其中之一。實(shí)體完整性這項(xiàng)規(guī)則要求每個(gè)數(shù)據(jù)表都必須有主鍵,而作為主鍵的所有欄位,其屬性必須是獨(dú)一及非空值。

      在關(guān)系數(shù)據(jù)庫(kù)中,唯一標(biāo)識(shí)每一行數(shù)據(jù)的字段稱為主鍵(Primary Key),主鍵字段不能為空。每個(gè)表有且只能有一個(gè)主鍵。

      2.3.2 參照完整性

      又稱引用完整性,是數(shù)據(jù)的屬性,用以表明引用的有效。參照的完整性不允許關(guān)系中有不存在的實(shí)體引用。參照完整性與實(shí)體完整性二者,皆是關(guān)系模型必須滿足的完整性約束條件,其目的在于保證數(shù)據(jù)的一致性。

      外鍵的參照完整性。

      • 外鍵(Foreign Key)代表了兩個(gè)表之間的關(guān)聯(lián)關(guān)系
        比如員工屬于某個(gè)部門(mén);因此員工表中存在部門(mén)編號(hào)字段,引用了部門(mén)表中的部門(mén)編號(hào)字段。對(duì)于外鍵引用,被引用的數(shù)據(jù)必須存在,員工不可能屬于一個(gè)不存在的部門(mén);刪除某個(gè)部門(mén)之前,也需要對(duì)部門(mén)中的員工進(jìn)行相應(yīng)的處理。

      2.3.3 用戶定義完整性

      基于業(yè)務(wù)需要自定義的約束。

      • 非空約束(NOT NULL)
        確保了相應(yīng)的字段不會(huì)出現(xiàn)空值,例如員工一定要有姓名

      • 唯一約束(UNIQUE)
        用于確保字段中的值不會(huì)重復(fù),每個(gè)員工的電子郵箱必須唯一

      • 檢查約束(CHECK)
        可以定義更多的業(yè)務(wù)規(guī)則,例如,薪水必須大于 0 ,字符必須大寫(xiě)等

      • 默認(rèn)值(DEFAULT)
        用于向字段中插入默認(rèn)的數(shù)據(jù)。

      MySQL 中只有 InnoDB 存儲(chǔ)引擎支持外鍵約束;MySQL 8.0.16 增加了對(duì)檢查約束的支持。因此我們強(qiáng)大的 MySQL 支持以上所有約束。

      從 MySQL 5.5 開(kāi)始默認(rèn)使用 InnoDB 存儲(chǔ)引擎,支持事務(wù)處理(ACID)、行級(jí)鎖定、故障恢復(fù)、多版本并發(fā)控制(MVCC)以及外鍵約束等

      3 SQL:面向集合編程

      3.1 語(yǔ)法特性

      SQL 是一種聲明性的編程語(yǔ)言,語(yǔ)法接近于自然語(yǔ)言(英語(yǔ))。通過(guò)幾個(gè)簡(jiǎn)單的英文單詞,例如 SELECT、INSERT、UPDATE、CREATE、DROP 等,完成大部分的數(shù)據(jù)庫(kù)操作。

      • 簡(jiǎn)單的查詢示例

        可以看出,SQL 簡(jiǎn)單直觀。

      • 以上查詢中的 SELECT、FROM 等稱為關(guān)鍵字(也稱為子句),一般大寫(xiě)

      • 表名、列名等內(nèi)容一般小寫(xiě)

      • 分號(hào)(;)表示語(yǔ)句的結(jié)束

      SQL 語(yǔ)句不區(qū)分大小寫(xiě),但是遵循一定的規(guī)則可以讓代碼更容易閱讀。

      SQL 是一種聲明式的語(yǔ)言,聲明式語(yǔ)言的主要思想是告訴計(jì)算機(jī)想要什么結(jié)果(what),但不指定具體怎么做。這類語(yǔ)言還包括 HTML、正則表達(dá)式以及函數(shù)式編程等。

      3.2 面向集合

      對(duì)于 SQL 語(yǔ)句而言,它所操作的對(duì)象是一個(gè)集合(表),操作的結(jié)果也是一個(gè)集合(表)。例如以下查詢:

      SELECT emp_id, emp_name, salary
        FROM employee;
      

      其中 employee 是一個(gè)表,它是該語(yǔ)句查詢的對(duì)象;同時(shí),查詢的結(jié)果也是一個(gè)表。所以,我們可以繼續(xù)擴(kuò)展該查詢:

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

      我們將括號(hào)中的查詢結(jié)果(取名為 dt)作為輸入值,傳遞給了外面的查詢;最終整個(gè)語(yǔ)句的結(jié)果仍然是一個(gè)表。

      SQL 中的查詢可以完成各種數(shù)據(jù)操作,例如過(guò)濾轉(zhuǎn)換、分組匯總、排序顯示等;但是它們本質(zhì)上都是針對(duì)表的操作,結(jié)果也是表。

      不僅僅是查詢語(yǔ)句,SQL 中的插入、更新和刪除都以集合為操作對(duì)象。我們?cè)倏匆粋€(gè)插入數(shù)據(jù)的示例:

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

      我們首先使用 CREATE TABLE 語(yǔ)句創(chuàng)建了一個(gè)表,然后使用 INSERT INTO 語(yǔ)句插入數(shù)據(jù)。在執(zhí)行插入操作之前,會(huì)在內(nèi)存中創(chuàng)建一個(gè)包含 3 條數(shù)據(jù)的臨時(shí)集合(表),然后將該集合插入目標(biāo)表中。由于我們通常一次插入一條數(shù)據(jù),以為是按照數(shù)據(jù)行進(jìn)行插入;實(shí)際上,一條數(shù)據(jù)也是一個(gè)集合,只不過(guò)它只有一個(gè)元素而已。

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

      4 數(shù)據(jù)庫(kù)案例

      包含 3 個(gè)表:?jiǎn)T工表(employee)、部門(mén)表(department)和職位表(job)。

      • 結(jié)構(gòu)圖,也稱為實(shí)體-關(guān)系圖(Entity-Relational Diagram)

      5 總結(jié)

      關(guān)系模型中定義了一個(gè)簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),即關(guān)系(表),用于存儲(chǔ)數(shù)據(jù)。SQL 是關(guān)系數(shù)據(jù)庫(kù)的通用標(biāo)準(zhǔn)語(yǔ)言,通過(guò)聲明的方式執(zhí)行數(shù)據(jù)定義、數(shù)據(jù)操作、訪問(wèn)控制等。
      記住,對(duì)于 SQL,一切都是關(guān)系(表)。

      參考

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多