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;