第6章 創(chuàng)建、修改和刪除表.ppt_第1頁
第6章 創(chuàng)建、修改和刪除表.ppt_第2頁
第6章 創(chuàng)建、修改和刪除表.ppt_第3頁
第6章 創(chuàng)建、修改和刪除表.ppt_第4頁
第6章 創(chuàng)建、修改和刪除表.ppt_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第6章 創(chuàng)建、修改和刪除表,表是數(shù)據(jù)庫存儲數(shù)據(jù)的基本單位。一個表包含若干個字段或記錄。表的操作包括創(chuàng)建新表、修改表和刪除表。這些操作都是數(shù)據(jù)庫管理中最基本,也是最重要的操作。在這一章中將講解如何在數(shù)據(jù)庫中操作表,內(nèi)容包括。 創(chuàng)建表的方法 表的完整性約束條件 查看表結(jié)構(gòu)的方法 修改表的方法 刪除表的方法,6.1 創(chuàng)建表,創(chuàng)建表是指在已存在的數(shù)據(jù)庫中建立新表。這是建立數(shù)據(jù)庫最重要的一步,是進(jìn)行其他表操作的基礎(chǔ)。本節(jié)主要講解如何創(chuàng)建表。,6.1.1 創(chuàng)建表的語法形式,MySQL中,創(chuàng)建表是通過SQL語句CREATE TABLE實現(xiàn)的。其語法形式如下: CREATE TABLE 表名 ( 屬性名 數(shù)據(jù)

2、類型 完整性約束條件, 屬性名 數(shù)據(jù)類型 完整性約束條件, . 屬性名 數(shù)據(jù)類型 );,6.1.2 設(shè)置表的主鍵,主鍵是表的一個特殊字段。該字段能惟一地標(biāo)識該表中的每條信息。主鍵和記錄的關(guān)系,如同身份證和人的關(guān)系。主鍵用來標(biāo)識每個記錄,每個記錄的主鍵值都不同。身份證是用來標(biāo)明人的身份,每個人都具有惟一的身份證號。設(shè)置表的主鍵指在創(chuàng)建表時設(shè)置表的某個字段為該表的主鍵。 主鍵的主要目的是幫助MySQL以最快的速度查找到表中的某一條信息。主鍵必須滿足的條件:主鍵必須是惟一的,表中任意兩條記錄的主鍵字段的值不能相同;主鍵的值是非空值。主鍵可以是單一的字段,也可以是多個字段的組合。 1單字段主鍵 2多字

3、段主鍵,6.1.3 設(shè)置表的外鍵,外鍵是表的一個特殊字段。如果字段sno是一個表A的屬性,且依賴于表B的主鍵。那么,稱表B為父表,表A為子表,sno為表A的外鍵。通過sno字段將父表B和子表A建立關(guān)聯(lián)關(guān)系。設(shè)置表的外鍵指在創(chuàng)建表設(shè)置某個字段為外鍵。本小節(jié)主要講解外鍵設(shè)置的原則、外鍵的作用、設(shè)置外鍵的方法。 設(shè)置外鍵的原則:必須依賴于數(shù)據(jù)庫中已存在的父表的主鍵;外鍵可以為空值。 外鍵的作用是建立該表與其父表的關(guān)聯(lián)關(guān)系。父表中刪除某條信息時,子表中與之對應(yīng)的信息也必須有相應(yīng)的改變。例如,stu_id是student表的主鍵,stu_id是grade表的外鍵。當(dāng)stu_id為123同學(xué)退學(xué)了,需要從

4、student表中刪除該學(xué)生的信息。那么,grade表中stu_id為123的所有信息也應(yīng)該同時刪除。,6.1.4 設(shè)置表的非空約束,非空性是指字段的值不能為空值(NULL)。非空約束將保證所有記錄中該字段都有值。如果用戶新插入的記錄中,該字段為空值,則數(shù)據(jù)庫系統(tǒng)會報錯。例如,在id字段加上非空約束,id字段的值就不能為空值。如果插入記錄的id字段的值為空,該記錄將不能插入。設(shè)置表的非空約束是指在創(chuàng)建表時為表的某些特殊字段加上NOT NULL約束條件。設(shè)置非空約束的基本語法規(guī)則如下: 屬性名 數(shù)據(jù)類型 NOT NULL,6.1.5 設(shè)置表的惟一性約束,惟一性是指所有記錄中該字段的值不能重復(fù)出現(xiàn)

5、。設(shè)置表的惟一性約束是指在創(chuàng)建表時為表的某些特殊字段加上UNIQUE約束條件。唯一性約束將保證所有記錄中該字段的值不能重復(fù)出現(xiàn)。例如,在id字段加上惟一性約束,所以記錄中id字段上不能出現(xiàn)相同的值。例如,在表的id字段加上惟一性約束,那么每條記錄的id值都是惟一的,不能出現(xiàn)重復(fù)的情況。如果一條的記錄的id為0001,那么該表中就不能出現(xiàn)另一條記錄的id為0001。設(shè)置惟一性約束的基本語法規(guī)則如下: 屬性名 數(shù)據(jù)類型 UNIQUE,6.1.6 設(shè)置表的屬性值自動增加,AUTO_INCREMENT是MySQL數(shù)據(jù)庫中一個特殊的約束條件。其主要用于為表中插入的新記錄自動生成惟一的ID。一個表只能有一

6、個字段使用AUTO_INCREMENT約束,且該字段必須為主鍵的一部分。AUTO_INCREMENT約束的字段可以是任何整數(shù)類型(TINYINT、SMALLINT、INT、BIGINT等)。默認(rèn)的情況下,該字段的值是從1開始自增。 設(shè)置屬性值字段增加的基本語法規(guī)則如下: 屬性名 數(shù)據(jù)類型 AUTO_INCREMENT,6.1.7 設(shè)置表的屬性的默認(rèn)值,在創(chuàng)建表時可以指定表中字段的默認(rèn)值。如果插入一條新的記錄時沒有為這個字段賦值,那么數(shù)據(jù)庫系統(tǒng)會自動為這個字段插入默認(rèn)值。默認(rèn)值是通過DEFAULT關(guān)鍵字來設(shè)置的。設(shè)置默認(rèn)值的基本語法規(guī)則如下: 屬性名 數(shù)據(jù)類型 DEFAULT 默認(rèn)值,6.2 查

7、看表結(jié)構(gòu),查看表結(jié)構(gòu)是指查看數(shù)據(jù)庫中已存在的表的定義。查看表結(jié)構(gòu)的語句包括DESCRIBE語句和SHOW CREATE TABLE語句。通過這兩個語句,可以查看表的字段名、字段的數(shù)據(jù)類型、完整性約束條件等。本節(jié)將詳細(xì)講解查看表結(jié)構(gòu)的方法。,6.2.1 查看表基本結(jié)構(gòu)語句DESCRIBE,MySQL中,DESCRIBE語句可以查看表的基本定義。其中包括,字段名、字段數(shù)據(jù)類型、是否為主鍵和默認(rèn)值等。DESCRIBE語句的語法形式如下: DESCRIBE 表名;,6.2.2 查看表詳細(xì)結(jié)構(gòu)語句SHOW CREATE TABLE,MySQL中,SHOW CREATE TABLE語句可以查看表的詳細(xì)定義

8、。該語句可以查看表的字段名、字段的數(shù)據(jù)類型、完整性約束條件等信息。除此之外,還可以查看表默認(rèn)的存儲引擎和字符編碼。SHOW CREATE TABLE語句的語法形式如下: SHOW CREATE TABLE 表名;,6.3 修改表,修改表是指修改數(shù)據(jù)庫中已存在的表的定義。修改表比重新定義表簡單,不需要重新加載數(shù)據(jù),也不會影響正在進(jìn)行的服務(wù)。MySQL中通過ALTER TABLE語句來修改表。修改表包括修改表名、修改字段數(shù)據(jù)類型、修改字段名、增加字段、刪除字段、修改字段的排列位置、更改默認(rèn)存儲引擎和刪除表的外鍵約束等。本節(jié)將詳細(xì)講解上述幾種修改表的方式。,6.3.1 修改表名,表名可以在一個數(shù)據(jù)庫

9、中唯一的確定一張表。數(shù)據(jù)庫系統(tǒng)通過表名來區(qū)分不同的表。例如,數(shù)據(jù)庫school中有student表。那么,student表就是唯一的。在數(shù)據(jù)庫school中不可能存在另一個名為“student”的表。MySQL中,修改表名是通過SQL語句ALTER TABLE實現(xiàn)的。其語法形式如下: ALTER TABLE 舊表名 RENAME TO 新表名 ;,6.3.2 修改字段的數(shù)據(jù)類型,字段的數(shù)據(jù)類型包括整數(shù)型、浮點數(shù)型、字符串型、二進(jìn)制類型、日期和時間類型等。數(shù)據(jù)類型決定了數(shù)據(jù)的存儲格式、約束條件和有效范圍。表中的每個字段都有數(shù)據(jù)類型。有關(guān)數(shù)據(jù)類型的詳細(xì)內(nèi)容見第4章。MySQL中,ALTER TAB

10、LE語句也可以修改字段的數(shù)據(jù)類型。其基本語法如下: ALTER TABLE 表名 MODIFY 屬性名 數(shù)據(jù)類型 ;,6.3.3 修改字段名,字段名可以在一張表中唯一的確定一個字段。數(shù)據(jù)庫系統(tǒng)通過字段名來區(qū)分表中的不同字段。例如,student表中包含id字段。那么,id字段在student表中是唯一的。student表中不可能存在另一個名為“id”的字段。MySQL中,ALTER TABLE語句也可以修改表的字段名。其基本語法如下: ALTER TABLE 表名 CHANGE 舊屬性名 新屬性名 新數(shù)據(jù)類型 ; 其中,“舊屬性名”參數(shù)指修改前的字段名;“新屬性名”參數(shù)指修改后的字段名;“新數(shù)

11、據(jù)類型”參數(shù)修改后的數(shù)據(jù)類型,如不需要修改,則將新數(shù)據(jù)類型設(shè)置成與原來一樣。 1只修改字段名 2修改字段名和字段數(shù)據(jù)類型,6.3.4 增加字段,在創(chuàng)建表時,表中的字段就已經(jīng)定義完成。如果要增加新的字段,可以通過ALTER TABLE語句進(jìn)行增加。MySQL中,ALTER TABLE語句增加字段的基本語法如下: ALTER TABLE 表名 ADD 屬性名1 數(shù)據(jù)類型 完整性約束條件 FIRST | AFTER 屬性名2 ; 1增加無完整性約束條件的字段 2增加有完整性約束條件的字段 3表的第一個位置增加字段 4表的指定位置之后增加字段,6.3.5 刪除字段,刪除字段是指刪除已經(jīng)定義好的表中的某

12、個字段。在表創(chuàng)建好之后,如果發(fā)現(xiàn)某個字段需要刪除??梢圆捎脤⒄麄€表都刪除,然后重新創(chuàng)建一張表的做法。這樣做是可以達(dá)到目的,但必然會影響到表中的數(shù)據(jù)。而且,操作比較麻煩。MySQL中,ALTER TABLE語句也可以刪除表中的字段。其基本語法如下: ALTER TABLE 表名 DROP 屬性名 ;,6.3.6 修改字段的排列位置,創(chuàng)建表的時候,字段在表中的排列位置就已經(jīng)確定了。如果要改變字段在表中的排列位置,則需要ALTER TABLE語句來處理。MySQL中,修改字段排列位置的ALTER TABLE語句的基本語法如下: ALTER TABLE 表名 MODIFY 屬性名1 數(shù)據(jù)類型 FIRS

13、T | AFTER 屬性名2; 其中,“屬性名1”參數(shù)指需要修改位置的字段的名稱;“數(shù)據(jù)類型”參數(shù)指“屬性名1”的數(shù)據(jù)類型;“FIRST”參數(shù)指定位置為表的第一個位置;“AFTER 屬性名2”參數(shù)指定“屬性名1”插入在“屬性名2”之后。 1字段修改到第一個位置 2字段修改到指定位置,6.3.7 更改表的存儲引擎,MySQL存儲引擎是指MySQL數(shù)據(jù)庫中表的存儲類型。MySQL存儲引擎包括InnoDB、MyISAM、MEMORY等。不同的表類型有著不同的優(yōu)缺點,在第5章有詳細(xì)的介紹。在創(chuàng)建表的時候,存儲引擎就已經(jīng)設(shè)定好了。如果要改變,可以通過重新創(chuàng)建一張表來實現(xiàn)。這樣做是可以達(dá)到目的,但必然會影

14、響到表中的數(shù)據(jù)。而且,操作比較麻煩。MySQL中,ALTER TABLE語句也可以更改表的存儲引擎的類型。其基本語法如下: ALTER TABLE 表名 ENGINE=存儲引擎名 ;,6.3.8 刪除表的外鍵約束,外鍵是一個特殊字段,其將某一表與其父表建立關(guān)聯(lián)關(guān)系。在創(chuàng)建表的時候,外鍵約束就已經(jīng)設(shè)定好了。由于特殊需要,與父表之間的關(guān)聯(lián)關(guān)系需要去除,要求刪除外鍵約束。MySQL中,ALTER TABLE語句也可以刪除表的外鍵約束。其基本語法如下: ALTER TABLE 表名 DROP FOREIGN KEY 外鍵別名 ;,6.4 刪除表,刪除表是指刪除數(shù)據(jù)庫中已存在的表。刪除表時,會刪除表中的

15、所有數(shù)據(jù)。因此,在刪除表時要特別注意。MySQL中通過DROP TABLE語句來刪除表。由于創(chuàng)建表時可能存在外鍵約束,一些表成為了與之關(guān)聯(lián)的表的父表。要刪除這些父表,情況比較復(fù)雜。本節(jié)將詳細(xì)講解刪除沒有被關(guān)聯(lián)的普通表和被其他表關(guān)聯(lián)的父表的方法。,6.4.1 刪除沒有被關(guān)聯(lián)的普通表,MySQL中,直接使用DROP TABLE語句可以刪除沒有被其他關(guān)聯(lián)的普通表。其基本語法如下: DROP TABLE 表名 ; 其中,“表名”參數(shù)為要刪除的表的名稱?!臼纠?-25】下面將刪除example5表,SQL代碼如下: DROP TABLE example5 ; 如果代碼運行成功,將從數(shù)據(jù)庫中刪除examp

16、le5表。在執(zhí)行代碼之前,先用DESC語句查看是否存在example5表,以便與刪除后進(jìn)行對比。,6.4.2 刪除被其他表關(guān)聯(lián)的父表,在6.1.3節(jié)中講解了創(chuàng)建表時設(shè)置表的外鍵。這樣就使數(shù)據(jù)庫中的某些表之間建立了關(guān)聯(lián)關(guān)系。一些表成為了父表,這些表被其子表關(guān)聯(lián)著。要刪除這些父表,情況不像上一節(jié)那么簡單。 【示例6-26】下面將要刪除6.1節(jié)中創(chuàng)建的example1表。SQL代碼如下: DROP TABLE example1 ; 代碼執(zhí)行后,結(jié)果顯示為: mysql DROP TABLE example1; ERROR 1217 (23000): Cannot delete or update a

17、 parent row: a foreign key constraint fails,6.5 本章實例,在本小節(jié)中將在example數(shù)據(jù)庫創(chuàng)建一個student表和一個grade表。 1登錄數(shù)據(jù)庫系統(tǒng) 2選擇example數(shù)據(jù)庫 3創(chuàng)建student表和grade表 4將grade表的course字段的數(shù)據(jù)類型改為VARCHAR(20) 5將s_num字段的位置改到course字段的前面 6將grade字段改名為score 7刪除grade表的外鍵約束 8將grade表的存儲引擎更改為MyISAM類型 9將student表的address字段刪除 10在student表中增加名為phone的字段 11將grade表改名為gradeInfo 12刪除student表,6.6 上機(jī)實踐,1操作teacher表 題目要求:本題將在school數(shù)據(jù)庫創(chuàng)建一個teacher表。 2操作department表和worker表 題目要求:本題將在example數(shù)據(jù)庫創(chuàng)建一個department表和一個work表。,6.7 常見問題及解答,1字段改名后,為什么會有部分約束條件丟失? 2如何設(shè)置外鍵? 3為什么自增字段不能設(shè)置默認(rèn)值? 4如何刪除父表?,6.8 小結(jié),本章介紹了創(chuàng)建

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論