1. 程式人生 > >MySQL資料表的操作

MySQL資料表的操作

在對MySQL資料表進行操作之前,必須首先使用USE語句選擇資料庫,才可以在指定的資料庫中對資料表進行操作,如建立資料表、修改表結構、資料表更名或刪除資料表等。

1、建立資料表

建立資料表使用CREATE TABLE語句。語法如下:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 資料表名
[(create_definition,…)][table_options][COMMENT = '表的註釋']

CREATE TABLE語句的引數說明:

關鍵字 說明
TEMPORARY 如果使用該關鍵字,表示建立一個臨時表
IF NOT EXISTS 該關鍵字用於避免表存在時MySQL報告錯誤
create_definition 這是表的列屬性部分。MySQL要求咋建立表時,表要至少包含一列
table_options 表的一些特性引數,其中大多數選項涉及的是表資料如何儲存及儲存在何處,如ENGINE選項用於定義表的儲存引擎。多數情況下,使用者不必指定表選項
COMMENT = '表的註釋' 為表添加註釋

下面介紹列屬性create_definition部分,每一列定義的具體格式如下。

col_name type [NOT NULL | NULL][DEFAULT default_value][AUTO_INCREMENT]
[PRIMARY KEY][COMMENT '欄位註釋']

屬性create_definition的引數說明:

引數 說明
col_name 欄位名
type 欄位型別
NOT NULL | NULL 指出該列是否允許為空值,系統一般預設允許為空值。
DEFAULT default_value 表示預設值
AUTO_INCREMENT 表示是否是自動編號,每個表只能有一個AUTO_INCREMENT列,並且必須被引用
PRIMARY KEY 表示是否為主鍵。一個表只能有一個PRIMARY KEY。如表中沒有一個PRIMARY KEY,而某些應用程式需要PRIMARY KEY,MySQL將返回第一個沒有任何NULL列的UNIQUE鍵,作為PRIMARY KEY
COMMENT '欄位註釋' 為欄位添加註釋

以上是建立一個數據表的一些基礎知識,它看起來十分複雜,但在實際的應用中使用最基本的格式建立資料表即可,具體格式如下。

CREATE TABLE 資料表名(列名1 屬性,列名2 屬性...);

示例:使用CREATE TABLE語句建立一個名為tb_admin的資料表。

CREATE TABLE IF NOT EXISTS tb_admin
(
	id INT AUTO_INCREMENT PRIMARY KEY COMMENT '編號(自增)',
	user VARCHAR(30) NOT NULL COMMENT '賬號',
	password VARCHAR(30) NOT NULL COMMENT '密碼',
	create_time DATETIME COMMENT '建立時間'
) COMMENT = '管理員資訊表';

2、查看錶結構

對於一個建立成功的資料表,可以使用SHOW COLUMNS語句或DESCRIBE語句檢視指定資料表的表結構。

2.1 使用SHOW COLUMNS語句

在MySQL中,使用SHOW COLUMNS語句可以查看錶結構,SHOW COLUMNS語句的基本語法格式如下:

SHOW  [FULL] COLUMNS  FROM 資料表名 [FROM 資料庫名];

或者:

SHOW  [FULL] COLUMNS  FROM 資料表名.資料庫名;

示例:使用SHOW COLUMNS語句檢視資料表tb_admin的表結構。

SHOW FULL COLUMNS FROM tb_admin;

2.2 使用DESCRIBE語句

在MySQL中,還可以使用DESCRIBE語句檢視資料表結構。DESCRIBE語句的基本語法格式如下:

DESCRIBE 資料表名;

其中,DESCRIBE可以簡寫成DESC。在查看錶結構時,也可以只列出某一列的資訊。其語法格式如下:

DESCRIBE 資料表名 列名;

示例:使用DESCRIBE語句檢視資料表tb_admin的表結構。

-- 檢視tb_admin表結構
DESCRIBE tb_admin;

-- 檢視user欄位資訊
DESCRIBE tb_admin user;

3、修改表結構

修改表結構使用 ALTER TABLE語句。修改表結構指增加或者刪除欄位、修改欄位名稱或者欄位義型別、設定取消主鍵外來鍵、設定取消索引以及修改表的註釋等,語法如下:

ALTER [IGNORE] TABLE 資料表名 alter_spec[,alter_spec]... table_options

引數說明如下:

(1)[IGNORE]:可選項,表示如果出現重複關鍵的行,則只執行一次,其它重複的行被刪除。

(2)資料表名:用於指定要修改的資料表的名稱。

(3)alter_spec子句:用於定義要修改的內容。

(4)table_options:用於指定表的一些特性引數,其中大多數選項涉及的是表資料如何儲存及儲存在何處,如ENGINE選項用於定義表的儲存引擎。多數情況下,使用者不必指定表選項。

alter_spec子句用於定義要修改的內容,其語法格式如下:

-- 新增新欄位
ADD [COLUMN] create_definition [FIRST | AFTER column_name]

-- 新增索引名稱
ADD INDEX [index_name](index_col_name,...)

-- 新增主鍵名稱
ADD PRIMARY KEY(index_col_name,...)

-- 新增唯一索引
ADD UNIQUE [index_name](index_col_name,...)

-- 修改欄位預設值
ALTER [COLUMN] column_name {SET DEFAULT literal | DROP DEFAULT}

-- 修改欄位名/型別
CHANGE [COLUMN] old_col_name create_definition

-- 修改子句定義欄位
MODIFY [COLUMN] create_definition

-- 刪除欄位名稱
DROP [COLUMN] column_name

-- 刪除主鍵名稱
DROP PRIMARY KEY

-- 刪除索引名稱
DROP INDEX index_name

-- 更改表名
RENAME [AS] new_tbl_name

上面的語法中,各引數說明如下:

(1)create_definition:用於定義列的資料型別和屬性。

(2)[FIRST|AFTER column_name]:用於指定位於哪個欄位的前面或者後面,當使用FIRST關鍵字時(後面不能加欄位名),表示位於該表的第一位;使用AFTER 關鍵字時,表示位於指定欄位的後面,其中的column_name表示欄位名。

(3)[index_name]:可選項,用於指定索引名。

(4)(index_col_name,...):用於指定索引列名。

(5){SET DEFAULT literal | DROP DEFAULT}子句:為欄位設定或者刪除預設值。其中literal引數為要設定的預設值。

(6)old_col_name:用於指定要修改的欄位名稱。

(7)new_tbl_name:用於指定新的表名。

說明:ALTER TABLE語句允許指定多個動作,其動作間使用逗號分隔,每個動作表示對錶的一個修改。

3.1 新增欄位

在MySQL的ALTER TABLE語句中,可以通過使用ADD [COLUMN] create_definition [FIRST | AFTER column_name ]子句來新增新欄位。

示例:新增一個新的email欄位,該欄位在password欄位的後面。

ALTER TABLE tb_admin ADD COLUMN email VARCHAR(50) NOT NULL COMMENT '電子郵箱' AFTER password;

3.2 修改欄位定義

使用MODIFY [COLUMN] create_definition子句可以修改已定義欄位的定義。

示例:修改email欄位的型別,將原先的VARCHAR(50)改成VARCHAR(100)。

ALTER TABLE tb_admin MODIFY COLUMN email VARCHAR(100) NOT NULL COMMENT '電子郵箱';

注意:修改時要把原來的其他屬性也加上,否則其他屬性會被清除了。如上面的示例如果寫成:ALTER TABLE tb_admin MODIFY COLUMN email VARCHAR(100); 那麼原先設定的非空和註釋也被覆蓋沒了。

3.3 修改欄位名

在MySQL的ALTER TABLE語句中,使用CHANGE [COLUMN] old_col_name create_definition子句可以修改欄位名或者欄位型別。

示例:修改user欄位名修改為user_name。

ALTER TABLE tb_admin CHANGE user user_name VARCHAR(30) NOT NULL COMMENT '賬號';

3.4 刪除欄位

在MySQL的ALTER TABLE中,使用DROP [COLUMN] col_name子句可以刪除指定欄位。

示例:刪除email欄位。

ALTER TABLE tb_admin DROP COLUMN email;

3.5 修改表名

在MySQL的ALTER TABLE中,使用RENAME [AS] new_tbl_name子句可以修改表名。

示例:修改表名,將td_admin表名修改為td_admin2。

ALTER TABLE tb_admin RENAME AS tb_admin2;

4、重命名錶

在MySQL中,重新命名資料表可以使用RENAME TABLE語句來實現,語法格式如下:

RENAME TABLE 資料表名1 To 資料表名2

示例:重命名錶,將td_admin2表名修改為td_user。

RENAME TABLE tb_admin2 TO tb_user;

5、複製表

建立表的CREATE TABLE命令還有另外一種語法結構,在一張已經存在的資料表的基礎上建立一份該表的拷貝,也就是複製表。

這種用法的語法格式如下:

CREATE TABLE [IF NOT EXISTS] 資料表名
	{LIKE 源資料表名 | (LIKE 源資料表名)}

示例:建立一份資料表tb_user的備份tb_userNew(僅表結構)。

CREATE TABLE tb_userNew
LIKE tb_user;

說明:使用該語法複製資料表時,將建立一個與源資料表相同結構的新表,該資料表的列名、資料型別和索引都將被複制,但是表的內容是不會被複制的。因此,新建立的表是一張空表。如果想要同時複製表中的內容,可以通過使用AS(查詢表示式)子句來實現。

示例:建立一份資料表tb_user的備份tb_userNew2(表結構+表資料)。

CREATE TABLE tb_userNew2
AS SELECT * FROM tb_user;

6、刪除表

刪除資料表的操作很簡單,同刪除資料庫的操作類似,使用DROP TABLE語句即可實現,語法格式如下: 

DROP TABLE [IF EXISTS] 資料表名;

示例:刪除tb_user表。

DROP TABLE IF EXISTS tb_user;