在本教程中,您將了解并使用MySQL ALTER TABLE語句來更改現(xiàn)有表結(jié)構(gòu)(如添加或刪除列,更改列屬性等)。
可以使用ALTER TABLE語句來更改現(xiàn)有表的結(jié)構(gòu)。 ALTER TABLE語句可用來添加列,刪除列,更改列的數(shù)據(jù)類型,添加主鍵,重命名表等等。 以下說明了ALTER TABLE語句語法:
ALTER TABLE table_name action1[,action2,…]
要更改現(xiàn)有表的結(jié)構(gòu):
ALTER TABLE子句之后指定要更改的表名稱。ALTER TABLE語句允許在單個(gè)ALTER TABLE語句中應(yīng)用多個(gè)操作,每個(gè)操作由逗號(,)分隔。讓我們創(chuàng)建一個(gè)用于練習(xí)ALTER TABLE語句的新表。
我們將在示例數(shù)據(jù)庫(yiibaidb)中創(chuàng)建一個(gè)名為tasks的新表。 以下是創(chuàng)建tasks表的腳本。
DROP TABLE IF EXISTS tasks;
CREATE TABLE tasks (
task_id INT NOT NULL,
subject VARCHAR(45) NULL,
start_date DATE NULL,
end_date DATE NULL,
description VARCHAR(200) NULL,
PRIMARY KEY (task_id),
UNIQUE INDEX task_id_unique (task_id ASC)
);
使用MySQL ALTER TABLE語句來設(shè)置列的自動遞增屬性
假設(shè)您希望在任務(wù)表中插入新行時(shí),task_id列的值會自動增加1。那么可以使用ALTER TABLE語句將task_id列的屬性設(shè)置為AUTO_INCREMENT,如下所示:
ALTER TABLE tasks
CHANGE COLUMN task_id task_id INT(11) NOT NULL AUTO_INCREMENT;
可以通過在tasks表中插入一些行數(shù)據(jù)來驗(yàn)證更改。
INSERT INTO tasks(subject,
start_date,
end_date,
description)
VALUES('Learn MySQL ALTER TABLE',
Now(),
Now(),
'Practicing MySQL ALTER TABLE statement');
INSERT INTO tasks(subject,
start_date,
end_date,
description)
VALUES('Learn MySQL CREATE TABLE',
Now(),
Now(),
'Practicing MySQL CREATE TABLE statement');
您可以查詢數(shù)據(jù)以查看每次插入新行時(shí)task_id列的值是否增加1:
SELECT
task_id, description
FROM
tasks;
使用MySQL ALTER TABLE語句將新的列添加到表中
由于新的業(yè)務(wù)需求,需要添加一個(gè)名為complete的新列,以便在任務(wù)表中存儲每個(gè)任務(wù)的完成百分比。 在這種情況下,您可以使用ALTER TABLE將新列添加到tasks表中,如下所示:
ALTER TABLE tasks
ADD COLUMN complete DECIMAL(2,1) NULL
AFTER description;
使用MySQL ALTER TABLE從表中刪除列
假設(shè)您不想將任務(wù)的描述存儲在tasks表中了,并且必須將其刪除。 以下語句允許您刪除tasks表的description列:
ALTER TABLE tasks
DROP COLUMN description;
可以使用ALTER TABLE語句重命名表。請注意,在重命名表之前,應(yīng)該認(rèn)真考慮以了解更改是否影響數(shù)據(jù)庫和應(yīng)用程序?qū)?,不要因?yàn)橹孛碇?,?yīng)用程序因未找到數(shù)據(jù)庫表而出錯。
以下語句將tasks表重命名為work_items表:
ALTER TABLE tasks
RENAME TO work_items;
在本教程中,您學(xué)習(xí)了如何使用MySQL ALTER TABLE語句來更改現(xiàn)有的表結(jié)構(gòu)并重命名表。