【云駐共創(chuàng)】華為云數(shù)據(jù)庫之表與視圖(華為云 圖數(shù)據(jù)庫)

      網(wǎng)友投稿 980 2025-04-01

      前言

      本文主要介紹的內(nèi)容有:

      表設(shè)計概述

      創(chuàng)建表

      表中數(shù)據(jù)的操縱

      視圖概述

      創(chuàng)建視圖

      使用視圖

      一、表設(shè)計概述

      在用文件柜管理資料的時代,當你將你的資料放進自己的文件柜中,并不是隨意的將這些資料扔進某個柜子里,而是要在文件柜中創(chuàng)建文件,然后將相關(guān)的資料放入特定的文件中。類比于我們現(xiàn)代在使用數(shù)據(jù)庫的條件下,我們將這種“文件”稱為表(table)。表是一種結(jié)構(gòu)化的文件,可以用來存儲某種特定類型的數(shù)據(jù)。例如,表可以存儲學(xué)生信息,選課記錄或者其他信息清單。

      從用戶的角度出發(fā),數(shù)據(jù)庫是一個表或者多個表的集合體。下圖描述的是人們在生活當中常用的學(xué)生信息表的基本構(gòu)成元素。設(shè)計一張表,首先要為表設(shè)定一個名字,用來概括表的基本內(nèi)容。接下來要確定表中有哪幾個欄目。平時開發(fā)者設(shè)定的藍色標題稱之為表頭,在數(shù)據(jù)庫中稱為列,或者叫做字段。所有的表都是由一個或者多個列組成的。列代表的是數(shù)據(jù)庫中所有存儲實體的某些屬性,例如學(xué)生的學(xué)號,姓名,性別等。而下圖中橫向標記的是行(row),代表表中的一條記錄,代表著數(shù)據(jù)庫中存儲的一個實體,一條數(shù)據(jù)。由此可見,表是由行和列構(gòu)成的二維網(wǎng)格,是某種特定類型數(shù)據(jù)的結(jié)構(gòu)化清單。圖中行和列交匯的方格被稱為單元格,也叫做值(value)。

      上圖的二維表對應(yīng)一張數(shù)據(jù)庫中的數(shù)據(jù)表,而下圖則是學(xué)生信息表在數(shù)據(jù)庫中對應(yīng)的結(jié)構(gòu)描述。數(shù)據(jù)庫表是滿足關(guān)系模型的一張相關(guān)數(shù)據(jù)的集合,是數(shù)據(jù)庫所有數(shù)據(jù)庫對象的基礎(chǔ)數(shù)據(jù)源。在數(shù)據(jù)庫中定義表的映射,就是根據(jù)表的定義來確定表的組織形式。包括列的個數(shù),列的列名,列的類型等。由此可以看出,一張二維表由表的表頭,表的列名,表的內(nèi)容這三個部分組成。其中表名是表的主要標識,用戶依靠表名向表中查詢數(shù)據(jù)或者使用表。表的記錄是表不可分割的基本項,不包含記錄的表稱為空表。

      二、創(chuàng)建表

      在了解表的基本組成之后,我們就可以開始創(chuàng)建表了。那么我們應(yīng)該如何創(chuàng)建表呢?創(chuàng)建表的過程其實是對表結(jié)構(gòu)進行定義,即是確定表字段的個數(shù),字段名,字段類型,索引,完整性定義等。表結(jié)構(gòu)設(shè)定的好與壞決定了使用效果。表中數(shù)據(jù)的冗余度,共享性以及完整性的高低,直接影響數(shù)據(jù)表的質(zhì)量。數(shù)據(jù)表的使用,分為兩類SQL語句的使用,分別是創(chuàng)建定義表的DDL(定義語言),對數(shù)據(jù)進行操作的DML(數(shù)據(jù)操作語言)。

      上圖定義了一個“school”表結(jié)構(gòu),那么如何使用DDL來創(chuàng)建一個表呢?

      創(chuàng)建表需要使用create table語句,具體的create table語句語法格式,如下圖藍紫色文字所示。其中方括號內(nèi)的語句是可選內(nèi)容。

      create table語句的功能就是創(chuàng)建一個數(shù)據(jù)庫表,具體的語句代表的功能可以參考下圖。

      在已有的數(shù)據(jù)庫(MY_database)中,創(chuàng)建一個數(shù)據(jù)庫表(MY_school)的SQL語句如下圖藍字和紫字所示。其中PRIMARY KEY指定了School_id為主鍵,是每一條記錄的唯一標識。后面的紫色語句指出了存儲引擎和排序規(guī)則等信息。

      將以上語句放在GaussDB平臺上執(zhí)行,可以得到以下結(jié)果。

      GaussDB平臺除了允許開發(fā)者使用SQL語句來創(chuàng)建表,還可以讓開發(fā)者利用“表設(shè)計視圖”來創(chuàng)建表。而且GaussDB平臺為大部分的數(shù)據(jù)庫操作都提供了這種方式?!氨碓O(shè)計視圖”方式雖然對初學(xué)者友好,但是在該模式下,某些復(fù)雜操作無法實現(xiàn),所以不提倡開發(fā)者使用該方式作為首選方式來操作數(shù)據(jù)。

      在創(chuàng)建表時,大部分開發(fā)者會因為考慮不周,操作不慎或表不適應(yīng)新的變化,使得表的結(jié)構(gòu)不再適合新的需求,這就需要開發(fā)者對表結(jié)構(gòu)進行相應(yīng)的修改。在GaussDB平臺使用的修改表結(jié)構(gòu)的語句是ALTER語句。以下便是ALTER語句的標準語法格式。其中方括號里面的內(nèi)容是可選選項。

      以下的例子,便是使用了ALTER語句為My_school表增加一個新字段。

      三、表中數(shù)據(jù)的操縱

      學(xué)習完表的創(chuàng)建,接下來我們要開始學(xué)習如何操縱表中的數(shù)據(jù)。這一部分主要分為三個方面,分別是如何插入數(shù)據(jù),如何修改數(shù)據(jù)以及如何刪除數(shù)據(jù)。至于如何查詢語句,大家可以前往華為云數(shù)據(jù)庫的其他課程中深入學(xué)習。

      插入數(shù)據(jù)

      這一小節(jié)主要介紹向數(shù)據(jù)庫表中添加數(shù)據(jù)的基本方法。通過create table語句剛創(chuàng)建出來的表,可以看作一個空箱子。只有把數(shù)據(jù)裝入這個箱子之后,它才能真正的被稱為數(shù)據(jù)庫。Create table語句屬于數(shù)據(jù)定義語言,而將數(shù)據(jù)裝入表中的insert語句屬于DML(數(shù)據(jù)操縱語言)。下圖顯示的便是insert 語句的語法格式。

      【云駐共創(chuàng)】華為云數(shù)據(jù)庫之表與視圖(華為云 圖數(shù)據(jù)庫)

      那么insert插入語句輸入后,會產(chǎn)生什么效果呢?通過下圖的示例,我們可以看到MY_school表是數(shù)據(jù)庫中已經(jīng)存在的表,并且該表中已經(jīng)有了若干條數(shù)據(jù)。通過下方藍色的insert語句,可以向數(shù)據(jù)庫中插入一條“媒體與設(shè)計”專業(yè)學(xué)生的數(shù)據(jù)。其中下面兩條sql語句的作用是一致的,只不過下面的那條語句相比于上面的語句,缺少了字段屬性的描寫。同時在撰寫sql語句時,字符型字段屬性對應(yīng)的文字,要用單引號括起來。

      以前說講述的insert語句語法,每次都只能插入一條記錄。那當我們想要插入多條語句時,又應(yīng)該怎么做呢?我們可以通過帶有子查詢的insert語句來實現(xiàn)。

      下圖的insert語句代表,將子查詢到的結(jié)果插入到表中,從而完成批量插入操作。

      那么帶有子查詢的insert語句在日常生活中,有何妙用呢?例如,我們可以通過該語句,來拷貝成績表,存儲到一個備份表中。

      要完成這個備份操作,就要求我們首先要創(chuàng)建新表,且新表的表結(jié)構(gòu)和原來的表結(jié)構(gòu)完全一致。然后通過帶有子查詢結(jié)果的insert語句,將原來的表的數(shù)據(jù)插入到新表中,具體的sql語句實現(xiàn),大家可以參考下圖。

      2.修改數(shù)據(jù)

      開發(fā)者日常開發(fā)中,插入數(shù)據(jù)之后,由于多種原因,時常需要更改其中的數(shù)據(jù)。那么我們應(yīng)該如何更改數(shù)據(jù)呢?我們通常使用update語句來修改表中的數(shù)據(jù)。update語句和insert語句同樣屬于DML。update語句的具體語法格式如下所示,其中的new_value一般是字面量形式,可以是子查詢語句,也可以是列的表達式。Update語句可以一次修改一個或者一個以上的字段的值。

      我們通過一個小案例來學(xué)習使用update語句。小案例的內(nèi)容是通過update語句將所有課程的學(xué)時增加2。.實現(xiàn)代碼如藍字所示。

      現(xiàn)在是將所有的學(xué)時都增加了2,現(xiàn)實生活中,我們有時候需要將某一課程的學(xué)分增加,又該如何處理呢,就如下面那個案例,將所有的3學(xué)分課程的學(xué)時增加一倍,那么我們可以通過where來限制哪些課程可以增加學(xué)分。具體的代碼如藍字所示。

      3.刪除數(shù)據(jù)

      在數(shù)據(jù)庫的實際應(yīng)用中,表中的數(shù)據(jù)可能會隨著時間的推移而失效,也可能因操作不當使數(shù)據(jù)出現(xiàn)錯誤。還可能因為數(shù)據(jù)來源不準確造成表中的數(shù)據(jù)不正確。那么這時候就需要清理刪除掉這些數(shù)據(jù)。那么在數(shù)據(jù)庫表中,我們又如何實現(xiàn)刪除表數(shù)據(jù)的操作呢?我們可以通過delete from語句來刪除數(shù)據(jù),具體的語法格式和注意事項如下所示。

      下面分別是通過delete語句完成刪除操作的示例。第一個示例是直接刪去“媒體與設(shè)計”學(xué)院的數(shù)據(jù),可以通過where字句找到信息,然后用delete from 語句直接刪除。而第二個示例比較復(fù)雜,需要刪除某位具體的學(xué)生的所有的課程信息,刪除的具體信息在表score中,但是條件卻是以班級編號為字段給出的,這個字段不在表score。為此我們用子查詢,將班級編號為“A1011901”的所有學(xué)生全部查出來,然后將這些在score表中存在的學(xué)生全部刪除。

      DELETE FROM語句和DROP TABLE語句都具有刪除的作用,但是它們有本質(zhì)的區(qū)別,那便是DROP TABLE語句會丟棄整個數(shù)據(jù)表。如果用水杯和水的關(guān)系比喻表和表中數(shù)據(jù)的關(guān)系,那么DELETE FROM語句是倒掉杯子里的水,而DROP TABLE語句則是將杯子和水一起丟掉。

      四、視圖概述

      表這種sql對象實際存儲在數(shù)據(jù)庫中,它們是持久的,基礎(chǔ)的數(shù)據(jù)源。而在sql中還存在另一種被稱為虛擬視圖的關(guān)系對象,也就是視圖(view)。

      那么視圖主要應(yīng)用在什么場景下呢?首先,讓我們設(shè)想這樣的一個業(yè)務(wù)場景,當我們在一個項目的實際開發(fā)過程中,出現(xiàn)了新的需求并涉及復(fù)雜的需求的時候,我們不可避免的需要從多個表中提取業(yè)務(wù)相關(guān)數(shù)據(jù)進行處理。這就有可能頻繁的進行多個表的連接操作,這些操作可能邏輯復(fù)雜,效率也比較低下。另外數(shù)據(jù)庫設(shè)計范式要求我們盡量減少冗余字段,因此很多數(shù)據(jù)表都沒有我們所謂的計算字段。例如,采購單的數(shù)據(jù)表一般會有價格,數(shù)量,稅率,含稅金額等字段,但多半沒有不含稅金額,稅額等信息,但這些字段在很多報表中都會用到,需要頻繁計算。而要解決這些問題最簡單的辦法就是創(chuàng)建新的表,這些表作為暫時存儲數(shù)據(jù)的中間表,將與新業(yè)務(wù)的相關(guān)數(shù)據(jù)整合在一起,進行了某種信息重組,可以簡化新業(yè)務(wù)的相關(guān)數(shù)據(jù)庫操作,下方的圖片展示的就是這種情況。

      一個可能很復(fù)雜的select語句,從table1,table2兩張表中分別提取了業(yè)務(wù)相關(guān)數(shù)據(jù),組成了一張新表。但是一般認為,在數(shù)據(jù)庫應(yīng)用系統(tǒng)的運行過程中,創(chuàng)建新表或者中間表是非常浪費資源的操作,特別是當相關(guān)業(yè)務(wù)涉及的資源特別巨大的時候。那么如何更好的解決這個問題呢?我們可以使用視圖來解決這個問題。

      那什么是視圖呢?從數(shù)據(jù)庫管理系統(tǒng)的角度來看,數(shù)據(jù)庫通常采用三級模式和兩級映射的結(jié)構(gòu)。其中內(nèi)模式對應(yīng)的是存儲文件,它反映了數(shù)據(jù)庫的物理結(jié)構(gòu)和存儲方式。模式對應(yīng)的是表,反映了數(shù)據(jù)庫中數(shù)據(jù)的整體邏輯結(jié)構(gòu)。而外模式是數(shù)據(jù)庫用戶能夠看到的,使用的,局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征描述,是與某一個應(yīng)用相關(guān)數(shù)據(jù)的邏輯表示,是數(shù)據(jù)庫的數(shù)據(jù)視圖。視圖是一種和表并列的數(shù)據(jù)庫對象,是從若干個表中按照某種條件抽取的數(shù)據(jù)所組成的“表”。視圖與表不同的是,視圖中的數(shù)據(jù)還是存儲在數(shù)據(jù)源中,因此可以將視圖看成是邏輯中存在的表。視圖不能單獨存在,它依賴于數(shù)據(jù)庫中的基本表存在。視圖可以是一個數(shù)據(jù)表的一部分,也可以是多個表的聯(lián)合組成的新的數(shù)據(jù)集。

      那么視圖和表有那些區(qū)別呢?我們通常用insert語句將實際數(shù)據(jù)存儲到數(shù)據(jù)庫中。而數(shù)據(jù)庫中的數(shù)據(jù)實際上會保存到計算機的存儲設(shè)備。而通過select語句查詢數(shù)據(jù),就是從存儲設(shè)備中讀取數(shù)據(jù),進行各種計算之后,將數(shù)據(jù)返回給用戶。但是當我們使用視圖的時候,數(shù)據(jù)庫系統(tǒng)并不會將數(shù)據(jù)保存到存儲設(shè)備之中,也不會將數(shù)據(jù)保存到其他任何地方。視圖實際上保存的是select語句。我們從視圖中讀取數(shù)據(jù)時,系統(tǒng)會在內(nèi)部執(zhí)行相應(yīng)的select語句m,并創(chuàng)建出一張臨時表。所以說表與視圖的最大區(qū)別就是是否保存了實際數(shù)據(jù)。

      視圖的組成和實質(zhì),讓視圖具有下圖中描述的特性。

      這些特性決定了視圖擁有以下的優(yōu)點,例如第四點,視圖隱藏了數(shù)據(jù)庫和應(yīng)用無關(guān)的部分,而用戶與視圖交互,使得視圖具有邏輯上的獨立性。同時,視圖通過對基礎(chǔ)表的過濾,對用戶隱藏數(shù)據(jù),從而增強了安全性。

      五、創(chuàng)建視圖

      當我們了解完視圖是什么之后,我們開始學(xué)習如何使用視圖。創(chuàng)建視圖和創(chuàng)建表的方式很相似。我們知道視圖是基于表來創(chuàng)建的。那么最簡單的創(chuàng)建視圖方式,就是基于單表的創(chuàng)建方式。在GaussDB平臺中,建立視圖是使用CREATE VIEW語句,具體的語法格式及注意事項可以參考下圖。其中需要注意的是下圖紫色字體中的AS,表示的是‘依照’,‘如同’的意思,此處的AS不可以省略。它與select語句中定義別名的as不具備相同的功能。

      Select語句中的字段排列順序和視圖的排列順序是相同的。而with check option選項的意思是,使用這個選項建立的視圖進行更新,插入等操作的時候,檢查新數(shù)據(jù)是否符合WHERE設(shè)置的條件,如果不符合,那么對于視圖中數(shù)據(jù)的修改就不能進行。如果建立視圖時不選擇這個選項,并且這個視圖是從單個基表導(dǎo)出的并去掉了這個基本表的某些行和某些列,但保留了主鍵,那么我們稱之為行列子集視圖,這個子集視圖都是可以修改數(shù)據(jù)的。

      下面這個例子就是在GaussDB平臺中,使用創(chuàng)建視圖語句,根據(jù)表My_school,創(chuàng)建單表視圖(v_school)。具體實現(xiàn)語句見藍字部分。值得注意的是,關(guān)系數(shù)據(jù)系統(tǒng)執(zhí)行create view語句的時候,只是把視圖定義存儲到數(shù)據(jù)字典,并不執(zhí)行其中的select語句,直有對視圖進行查詢等操作時,系統(tǒng)才會按視圖的定義從基本表中將數(shù)據(jù)查出。

      那么基于多個基本表是如何創(chuàng)建視圖的呢?建立多表視圖也是使用CREATE VIEW語句,具體的語法格式及注意事項可以參考下圖。

      與基礎(chǔ)表一樣,在創(chuàng)建視圖之后,由于定義時考慮不周全,或者需求的變化,需要對視圖的結(jié)構(gòu)進行維護。維護視圖包括修改視圖和刪除視圖兩種操作。

      修改視圖的語法格式和表的修改格式類似,修改視圖本質(zhì)就是給指定視圖換了一個select語句。具體的語法格式和注意事項如下圖所示。

      下面是通過ALTER VIEW語句完成修改視圖操作的示例和結(jié)果,主要是為已知視圖增加一個新的字段。

      當視圖不再被需要,可以通過DROP VIEW語句實現(xiàn)刪除視圖操作,并且可以一次刪除多個視圖。刪除視圖不會影響表中的基本數(shù)據(jù)。具體的語法格式和注意事項,可以查看下圖。

      六、使用視圖

      在使用視圖方面,也有增刪查改這4個操作,與使用表的操作類似。但是視圖畢竟不是表,在增刪查改等操作方面仍有一定的限制。

      在這些操作中,查詢操作的限制是最少的,使用也是最多的。由于create語句只是將select語句存進字典中,當然也就不會有任何的數(shù)據(jù)顯示出來。只有對視圖進行查詢操作時,系統(tǒng)才會按照視圖定義,從基本表中將數(shù)據(jù)查出來。也就是說,只有在視圖上進行了查詢操作,才真正發(fā)揮了視圖的作用。下圖就是一個簡單的視圖查詢案例。

      查詢操作是讀操作,查詢視圖不會修改表中的數(shù)據(jù),所以查詢視圖操作限制很少。插入更新,刪除等操作涉及數(shù)據(jù)的寫操作,都屬于廣義的更新操作。數(shù)據(jù)庫管理系統(tǒng)對于視圖的這類更新操作具有嚴格的限制。那為什么會有這些限制呢?這是因為視圖歸根結(jié)底還是由基本表派生出來的,如果基礎(chǔ)表可以更新,那么視圖就可以更新,反之亦然。但是視圖發(fā)生了更新,基本表卻無法更新,那就無法保證數(shù)據(jù)的一致性。由此,系統(tǒng)就會限制視圖的更新。常見的有代表性的更新視圖的限制如下圖所示。

      我們進行插入視圖的的操作時,要嚴格按照以上的限制處理。不然在實際開發(fā)項目就會報錯。插入操作的具體語法格式和示例如下圖所示,它的語法格式和基本表的插入操作格式是一致的,大家可以舉一反三。

      七、總結(jié)

      本文主要介紹了表和視圖的相關(guān)概念和常規(guī)的操作,大家可以搭配GaussDB平臺來學(xué)習,畢竟實踐永遠是學(xué)習的最佳方式。數(shù)據(jù)庫除了表,還有數(shù)據(jù)庫設(shè)計和建模,數(shù)據(jù)查詢,SQL語言的等知識,華為云數(shù)據(jù)庫體提供了一站式的開發(fā)教學(xué)課程,大家可以按需學(xué)習。爭取早日吃透數(shù)據(jù)庫的相關(guān)知識。

      參考鏈接

      華為云在線課程:https://edu.huaweicloud.com/courses

      本文整理自華為云社區(qū)【內(nèi)容共創(chuàng)】活動第15期。

      查看活動詳情:

      https://bbs.huaweicloud.com/blogs/345822

      相關(guān)任務(wù)詳情:任務(wù)24.

      華為云數(shù)據(jù)庫之表與視圖

      GaussDB數(shù)據(jù)庫 上云必讀 云原生 云數(shù)據(jù)庫 GaussDB(for MySQL) 數(shù)據(jù)庫

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:wps如何調(diào)節(jié)圖片透明度?wps圖片透明色設(shè)置方法
      下一篇:React 之可伸縮列的表格
      相關(guān)文章
      亚洲午夜一区二区电影院| 久久久无码精品亚洲日韩蜜臀浪潮 | jzzijzzij在线观看亚洲熟妇| 亚洲男同帅GAY片在线观看| 亚洲精品在线电影| 亚洲av无码专区在线播放| 精品国产人成亚洲区| 久久精品国产亚洲AV无码娇色| 亚洲一级特黄大片无码毛片| 色偷偷亚洲第一综合| 亚洲日本VA午夜在线影院| 亚洲精品午夜视频| 亚洲人成电影亚洲人成9999网| 久久亚洲精品成人综合| 国产亚洲综合成人91精品 | 国产亚洲精品看片在线观看 | 国产av无码专区亚洲av桃花庵| 亚洲综合色自拍一区| 国产精品亚洲成在人线| 久久久久se色偷偷亚洲精品av| 亚洲国产精品综合久久网各 | 亚洲一区二区三区在线播放| 99亚洲乱人伦aⅴ精品| 亚洲国产美女精品久久久| 亚洲AV一区二区三区四区| 精品国产成人亚洲午夜福利| 亚洲精品自偷自拍无码| 国产成人精品久久亚洲高清不卡 | 亚洲AV无码日韩AV无码导航| 久久精品国产精品亚洲人人 | 亚洲最新永久在线观看| 亚洲综合熟女久久久30p| 国产AV无码专区亚洲精品| 亚洲日本一区二区三区| 亚洲成a人片在线观看中文!!! | 亚洲麻豆精品果冻传媒| 亚洲喷奶水中文字幕电影| 亚洲精品视频在线观看免费| 亚洲AV无码专区在线亚| 亚洲国产AV一区二区三区四区| 18禁亚洲深夜福利人口|