1. 程式人生 > >MySQL-建立、修改和刪除表

MySQL-建立、修改和刪除表

表是資料庫儲存資料的基本單位。一個表包含若干個欄位或記錄。表的操作包括建立新表、修改表和刪除表,這些操作都是資料庫管理中最基本、也是最重要的操作。

建立表

建立表是在已存在的資料庫中建立新表。

建立表的語法格式

MySql中,建立表是通過SQL語句create table 實現的,其語法形式如下:

create table 表名(屬性名 資料型別[完整性約束條件],屬性名 資料型別[完整性約束條件],...屬性名 資料型別);

如圖所示:


建立這個表之後,可以用SQL語句查看錶結構,如圖:


也可以用desc 表名 來檢視~~

完整性約束條件如下:


設定表的主鍵

主鍵是表的而一個特殊欄位。該欄位能唯一地標識該表中的每條資訊。主鍵和記錄的關係,如同身份證和人的關係。主鍵用來標識每個記錄,每個記錄的主鍵值都不同。

設定表的主鍵指在建立表的時候設定表的某個欄位為該表的主鍵。

主鍵的主要目的是幫助Mysql以最快的速度查詢到表中的某一條資訊。主要必須滿足的條件:主鍵必須是唯一的,表中任意兩條記錄的主鍵欄位的值不能相同;主鍵的值是非空值和NULL值。主鍵可以是單一的欄位,也可以是多個欄位的組合。

1.單欄位主鍵如圖:


2.多欄位主鍵如圖:


設定表的外來鍵

外來鍵是表的一個特殊欄位。如果欄位sno是一個表A的屬性,且依賴於表B的主鍵,那麼,可以稱表B是父表,表A是子表,sno是表A的外來鍵

設定表的外來鍵指在建立表時設定某個欄位為外來鍵。

設定外來鍵的原則:必須依賴於資料庫中已存在的父表的主鍵;外來鍵可以為空值。

外來鍵的作用是建立該表與其父表的關聯關係。父表中刪除某條資訊時,字表中與之對應的資訊也必須有相應的修改。例如,stu_id是學生表的主鍵,是成績表的外來鍵,當stu_id為‘123’的同學退學了,需要從學生表中刪除該學生的資訊,那麼,成績表中stu_id為‘123’的所有資訊也應該同時刪除。

設定外來鍵的命令如圖:


設定表的非空約束

非空性是指欄位的值不能為空值(null)。非空約束將保證所有記錄中該欄位都要有值。如果使用者新插入的記錄中,該欄位為空值,則資料庫系統會報錯

設定表的非空約束是指在建立表的時候為表的某些特殊欄位加上not null約束條件。設定非空約束的基本語法規則如下:

屬性名 資料型別 not  null,如圖所示:


注意:NOT  NULL代表在MySQL中不允許向該欄位插入空值,但是這個規則在自增列中並不適用,因為向這些欄位插入NULL值將會導致插入一個自動增加的值

設定表的唯一性約束

唯一性是指所有記錄中該欄位的值不能重複出現。設定表的唯一性約束是指在建立表時為表的某些特殊欄位加上unique約束條件,唯一性約束將保證所有記錄中該欄位的值不重複出現。設定唯一性約束的基本語法規則如下:屬性名 資料型別 unique ,如圖所示:


設定表的屬性值自動增加

AUTO_INCREMENT是Mysql資料庫中一個特殊的約束條件。其主要用於為表中插入的新記錄自動生成唯一的ID。一個表只能有一個欄位使用它約束,且該欄位必須為主鍵的一部分。AUTO_INCREMENT約束的欄位可以是任何整數型別。預設的情況下,該欄位的值是從1開始自增。

設定屬性值欄位增加的基本語法規則如下:屬性名 資料型別 AUTO_INCREMENT

注意:當一個欄位設定為主鍵時,又設定為自動增加,欄位的值可以為NULL

設定表的屬性的預設值

在建立表的時候可以指定表中欄位的預設值。如果插入一條新的記錄時沒有為這個欄位賦值,那麼資料庫系統會自動為這個欄位插入預設值。預設值是通過DEFAULT關鍵字來設定的。設定預設值的基本語法規則如下:屬性名 資料型別 DEFAULT 預設值。如圖:


查看錶結構

查看錶結構是指檢視資料庫中已存在的表的定義。查看錶結構的語句包括DESCRIBE語句和SHOW CREATE TABLE 語句。通過這兩個語句,可以查看錶的欄位名,欄位的資料型別、完整性約束條件等。

查看錶基本結構語句DESCRIBE

Mysql中,DESCRIBE語句可以查看錶的基本定義。其中包括,欄位名、欄位資料型別、是否為主鍵和預設值等。

DESCRIBE語句的語法形式如下:

DESCRIBE 表名;


也可以使用desc  表名來檢視


查看錶詳細結構語句show create table

Mysql中,show create table語句可以查看錶的詳細定義。該語句可以查看錶的欄位名,欄位的資料型別、完整性約束條件等資訊。除此之外,還可以查看錶預設的儲存引擎和字元編碼。

語法形式如下:show create table 表名;


修改表

修改表示指修改資料庫中已存在的表的定義。修改表比重新定義表簡單,不需要重新載入資料,也不會影響正在進行的服務。MySQL中通過alter  table語句來修改表。修改表包括修改表名、欄位資料型別、欄位名、增加欄位、刪除欄位、修改欄位的排列位置、更改預設儲存引擎和刪除表的外來鍵約束等。

修改表名

表名可以在一個數據庫中唯一的確定一張表。資料庫系統通過表名來區分不同的表。在MySQL中,修改表名是通過sql語句alter table 實現的。其語法形式

如下:alter table 舊錶名 rename [to] 新表名;


修改欄位的資料型別

欄位的資料型別包括整數型、浮點數型、二進位制型別、日期和時間型別等。資料型別決定了資料的儲存格式、約束條件和有效範圍。MySQL中,alter table語句也可以修改欄位的資料型別。其基本語法如下:

alter table 表名 modify 屬性名 資料型別;


修改欄位名

欄位名可以在一張表中唯一的確定一個欄位。資料庫系統通過欄位名來區分表中的不同欄位。其基本語法如下:

alter table 表名 change 舊屬性名 新屬性名 新資料型別;

其中,“舊屬性名”引數指修改前的欄位名,“新屬性名”引數指修改後的欄位名,“新資料型別”引數是修改後的資料型別,如不需要修改,則將資料型別設定成與原來一樣。

1.只修改欄位名

2.修改欄位名和欄位資料型別


增加欄位

在建立表時,表中的欄位就已經定義完成。如果要增加新的欄位,就可以通過alter table語句進行增加。其基本語法如下:

alter table 表名 add 屬性名1 資料型別[完整性約束條件] [FIRST | after 屬性名2];

1.增加無完整性約束條件的欄位


2.增加有完整性約束條件的欄位


3.表的第一個位置增加欄位


4.表的指定位置之後增加欄位


刪除欄位

刪除欄位是指刪除已經定義好的表中的某個欄位。在表建立好之後,如果發現某個欄位需要刪除。可以採用將整個表都刪除,然後重新建立一張表的做法。這樣做是可以達到目的,但必然會影響到表中的資料。而且,操作比較麻煩。MySQL中,alter table 語句也可以刪除表中的欄位,其基本語法如下:

alter table 表名 drop 其屬性名;


修改欄位的排列位置

建立表的時候,欄位在表中的排雷位置就已經確定了。如果要改變欄位在表中的排列位置,則需要alter table 語句來處理。mysql中,修改欄位排列位置的alter table 語句的基本語法如下:

alter table 表名 modify 屬性名1 資料型別 First | after 屬性名;

其中,“屬性名1”引數指需要修改位置的欄位的名稱;“資料型別”引數指“屬性名1”的資料型別,“First”引數指定位置為表的第一個位置,“after屬性名2”引數指定“屬性名1”插入在“屬性名2”之後。

1.欄位修改到第一個位置


2.欄位修改到指定位置


更改表的儲存引擎

MySQL中儲存引擎是指MySQL資料庫中表的儲存型別。MySQL儲存引擎包括In弄DB、MyISAM、MEMORY等。不同的表型別有著不同的優缺點。在建立表的時候,儲存型別就已經設定好了。如果要改變,可以通過重新建立一張表來實現。這樣做是可以達到目的,但必然會影響到表中的資料。而且,操作比較麻煩。MySQL中,alter table語句也可以更改表的儲存引擎的型別。其基本語法如下:

alter table 表名 engine=儲存引擎名;


刪除表的外來鍵約束

外來鍵是一個特殊欄位,其將某一表與其父表建立關聯關係。在建立表的時候,外來鍵約束就已經設定好了。由於特殊需要,與父表之間的關聯關係需要去除,要求刪除外來鍵約束。MySQL中,alter table 語句也可以刪除表的外來鍵約束,其語法如下:

alter table 表名 drop foreign key 外來鍵別名;


刪除表

刪除表是指刪除資料庫中已存在的表。刪除表時,會刪除表中的所有資料。因此,在刪除表時要特別注意。MySQL中通過drop table語句來刪除表。由於建立表時可能存在外來鍵約束,一些表成為了與之關聯的表的父表。要刪除這些父表,情況比較複雜。

刪除沒有被關聯的普通表

MySQL中,直接使用drop table 語句可以刪除沒有被其他關聯的普通表,其基本語法如下:

drop table 表名;其中“表名”引數為要刪除的表的名稱。

在刪除表之前,先用desc語句檢視是否存在表,以便與刪除後進行對比。


刪除被其他表關聯的父表

要刪除被其他表關聯的父表,情況不像上面那樣簡單,如圖所示:


先刪除外來鍵,然後在使用drop table 表名語句就可以刪除父表,如圖: