資料庫學習(4) 資料表的建立與更新1

2021-12-30 03:46:34 字數 4399 閱讀 2627

資料庫學習(4)——資料表的建立與更新1

資料庫學習(3)——資料庫的建立與刪除

資料表是關聯式資料庫中操作的級別物件。在關聯式資料庫中,通過資料表來儲存資料記錄。在資料表中會經常用到主鍵、外來鍵、約束和索引。這一章將對資料表中涉及到的資料型別以及主鍵、外來鍵、約束和索引等概念和使用方法做乙個全面的介紹。另外還將介紹資料表的建立方法,以及如何對錶中的記錄進行增加和修改操作、如何刪除資料表等內容。

資料庫中的表

在關聯式資料庫中,資料表是儲存資料的基本單元,由行和列兩部分組成的。它是根據資料庫設計階段的e-r圖轉換而來。在資料表中除了行、列、資料記錄、屬性、欄位等基本概念外,還會涉及到主鍵、外來鍵、索引、約束等概念。

資料記錄、屬性、字段、列、行

在關聯式資料庫中,資料表是儲存資料的基本單元,由行和列兩部分組成的。其中,行用來描述實體中的具體資料,在資料表中每一行中的資料被稱為一條資料記錄,也可以簡稱為記錄;欄位是表中的一列,用來儲存資料表中某一條記錄中的特定資訊。欄位在關聯式資料庫中也可以稱為列。

主鍵為了保證在一張資料表中不會出現兩個完全相同的資料記錄,需要為每一張資料表都定義乙個主鍵。主鍵作為資料表中的唯一標示,保證了一條記錄的唯一性。通過主鍵可以區分資料表中的每一條記錄。在建立資料表時,需要保證被定義為主鍵的列的列值唯一,並且不能為空值(即null值)。

主鍵在關係模型中用來約束實體完整性。所謂實體完整性約束是指對資料表中行的完整性約束。在實體完整性中,需要有乙個主鍵來唯一標示資料表中每一行的資料記錄,資料表中的主鍵唯一且不能為空值。

注意:主鍵可以定義在多個列上,並不一定只定義在乙個列上。也就是說,在定義資料表的時候,可以將資料表中的多個列合併在一起作為該錶的主鍵。

外來鍵外來鍵是用來定義表與表之間的關係的。在資料表中,外來鍵是這樣定義的:如果屬性列f是關係b中乙個屬性(並不是關係b的主鍵),並且屬性列f是關係a中的主鍵,則f就是關係b的外來鍵。關係a中的表被稱為主表,關係b中的表被稱為主表的從表。

外來鍵在關係模型中用來約束參照完整性。所謂參照完整性約束是指表與表之間的約束。在參照完整性中,從表中的每一條資料記錄中的外鍵值都必須存在於主表中。對於建立了關聯關係的兩個資料表來說,對其中乙個資料表的增加、修改或者刪除資料的操作都會對另乙個資料表中的記錄產生影響。

索引在實際應用中,為了加快訪問速度,節省訪問時間,一般都需要使用索引進行查詢。例如。在使用**薄查詢**時,為了減少查詢的時間,一般都會使用**薄中提供的企業名稱作為索引來查詢;在使用一本書學習某一部分知識的時候,一般都需要翻看書後提供的索引,一般書後的索引都會以字母順序將相關的主題資訊列出,通過這個索引的指引,讀者可以很快查詢到想要的資訊,而不需要為了查詢某乙個知識點而將書中所有的內容都翻看一遍,節省了查閱的時間,也保證了學習效率。

資料庫中的索引與書後提供的索引的功能相同,在資料庫的應用中,往往一張資料表中會包含上千條甚至上萬條記錄,因此為了加快對資料表的訪問,通常需要在資料表中建立適當的索引。通過建立索引,在查詢資料表中的資料時,資料庫可以很快的將其找到,而不用掃瞄整個資料表。

索引是乙個指向資料表中資料的指標,指向索引欄位在資料表中的物理位置。如果在執行查詢操作時,where子句中指定的字段是被設定為索引的字段,則資料庫會首先在索引中對指定的值進行查詢,並返回查詢的資料在資料表中的位置。如果在執行查詢操作時,where子句中指定的字段沒有設定為索引的字段,那麼資料庫會查詢資料表中的每一行資料記錄,進行全部掃瞄。因此適當的建立索引,可以加快資料的檢索速度,提高對資料的訪問效率,提供資料查詢的效能。

當然,索引本身也有一些弊端,例如,索引會占用大量的硬碟空間;隨著資料列的增加,建立和維護索引的時間也會隨之增加;在對資料進行增加、刪除和修改等更新操作的時候,需要對索引進行維護,降低更新資料的速度。因此,對那些不是在查詢過程中經常用到的列以及在資料表中經常需要進行增加、刪除和修改等更新操作的列就不適合建立索引。

雖然建立索引可以提高查詢的速度,但是由於索引本身會占用物理空間以及維護索引可能帶來的時間的損耗,所以在為資料表中的列建立索引時,並不是為資料表中的每乙個列都要建立索引,那樣做反而不會起到提高查詢效率的作用。因此需要在資料表的適當的列上建立索引。一般可以在下面這些列中建立索引。

1.在主鍵列中建立索引

2.多表連線時,在經常使用的連線列上建立索引

3.在經常使用where子句查詢的列上建立索引

4.在經常進行分組(group by)和排序(oredr by)的列上建立索引

約束為了保證資料的完整性,需要使用資料庫約束。完整性約束包括對錶的約束和對列的約束。表約束主要包括唯一約束、主鍵約束、外來鍵約束和check約束,列約束除了包括唯一約束、參照約束和check約束之外,還有非空約束

唯一約束(unique):保證使用唯一約束的某一列或者一組列中沒有相同的值,即保證列的值的唯一性。但是唯一約束中可以允許在列中插入空值(即null值)。

主鍵約束(primary key):保證使用主鍵約束的列中只能有唯一的值,並且不能包含空值。資料表中每一列只能定義乙個primary key。

外來鍵約束(foering key):保證表的參照完整性確保對乙個表的資料操作不會對與之關聯的表造成不利的影響。

檢查約束(check):限制列的取值範圍或者取值條件。可以為乙個列定義多個check約束。

非空約束(not null):只用來約束列。在向該列插入資料時不允許插入空值。

建立資料表 

在建立完資料庫之後,就可以在資料庫中建立資料表了。建立資料表可以通過使用create table語句。使用creat table語句建立資料表的語法格式如下:

create table table_name(

column_name1 datatype1 [constraint_condition1]

[, column_name2 datatype2 [constraint_condition2]]…

)column_name1為指定資料表的列名;datatype1為指定列名的資料型別;constraint_condition1為指定列名的完整性約束。

為了保證資料的完整性,需要使用資料庫約束。約束主要包括唯一約束(unique)、主鍵約束(primary key)、外來鍵約束(foreign key)、檢查約束(check)和非空約束(not null)。

唯一約束(unique)用來保證某一列或者一組列中沒有相同的值。如果為列定義了唯一約束,則該列中不允許出現重複的值,但是允許列中存在空值(即null值)。唯一約束即可以定義的表級上,也可以定義在列級上。一般在為列建立唯一約束後,資料庫會自動為該列建立乙個唯一索引,其索引名與約束名是相同的。

主鍵約束(primary key)是用來保證使用主鍵約束的某一列或者一組列中有唯一的值,並且不能包含空值(即null值)。資料表中每一列只能定義乙個primary key。一般在為列建立主鍵約束後,資料庫會自動為該列建立乙個主索引,其索引名與約束名是相同的。

在建立資料表時,如果希望將多個列組合起來作為乙個資料表中的主鍵,可以在primary key關鍵字後使用括號,將需要定義為主鍵的列放到primary key關鍵字後面的括號中。括號中的多個列之間需要使用逗號分割。

首先來考慮這樣乙個問題,現在由於某種原因需要將一名學生在學校的全部資訊刪除。這裡涉及學生資訊的一共有兩個表,乙個是學生資訊表,乙個是成績資訊表。學生資訊表儲存的是學生的基本資訊,成績資訊表儲存的是學生選課的課程成績資訊。如果沒有定義外來鍵約束,將該名學生從學生資訊表中刪除時,而沒有將該名學生的選課的課程成績資訊刪除,這樣就會造成兩個關聯表之間資料的不一致。

同樣的問題也可能出現在對兩個關聯表中資料的修改操作中。如果是多個表之間存在關聯關係的話,不定義外來鍵約束,類似上面的情況很可能會發生。為了避免由於操作不當而引起的關聯表中資料的不一致,有必要為關聯表之間定義外來鍵約束。

外來鍵約束(foering key)主要是用來定義兩個表之間的關係。外來鍵約束保證了表的參照完整性,確保對乙個表的資料操作不會對與之關聯的表造成不利的影響。定義外來鍵的語法格式如下:

foreign key[表名1](列名1) references 表名2(列名2)

[on update [cascade]|[set null]|[restrict]]

[on delete[cascade]|[set null]|[restrict]]

其後的on update和on delete分別指明了對錶中的資料做修改和刪除時,主從表之間要採用的主要操作方式。

cascade:級聯刪除。如果主表中的一條資料記錄被刪除,那麼從表中與之相對應的的資料也將被一起刪除。

set null:置空刪除。如果主表中的一條資料記錄被刪除,那麼從表中與之相對應的的資料也將被設定為空值。

restrict:受限刪除。如果主表中的一條資料記錄被刪除,則在執行delete命令時資料庫管理系統會報錯,通知使用者與主表相對應的該資料在從表中仍然存在,但是與主表相對應的該資料在從表中不會被刪除。它是預設的方式。

檢查約束(check)是用來限制列的取值範圍或者取值條件,使用check約束可以保證資料規則的一致性。可以為乙個列定義多個check約束,當為列定義了check約束後,該列中所對應的資料必須滿足指定的約束條件。

非空約束(not null)是用來保證在向該列插入資料時不允許插入空值(即null值)。非空約束只能用來約束列。

php sql建立資料庫與資料表

使用wampserver64,php版本7.3.12,資料庫伺服器mysql。參考整理了菜鳥教程,並新增了一些注釋。使用時需根據情況修改 servername username password dbname servername localhost 3308 預設埠是3306,這裡我使用mysql...

1建立資料庫,資料表

1.建立資料庫 create database 資料庫名 2.刪除資料庫 drop database 資料庫名 drop database if exists 資料庫名 3.檢視所有資料庫 show databases 4.切換資料庫 use 資料庫名 5檢視所有的資料庫引擎 show engine...

PHP建立資料庫資料表

php建立資料庫資料表 con mysql connect localhost root root 在資料庫中建立表 if con database my db name sqldatabase create database database if mysql query sqldatabase,...