mysql修改表結構的語句是“ALTER TABLE”,該語句可以改變原有表的結構,例如增加或刪減列、更改原有列類型、重新命名列或表等;語法格式為“ALTER TABLE [修改選項]”。
本教程操作環境:windows7系統、mysql8版本、Dell G3電腦。
mysql修改表結構的語句是“ALTER TABLE”。
ALTER TABLE?語句可以改變原有表的結構,例如增加或刪減列、創建或取消索引、更改原有列類型、重新命名列或表等。
MySQL 使用 ALTER TABLE 語句修改表。常用的修改表的操作有修改表名、修改字段數據類型或字段名、增加和刪除字段、修改字段的排列位置、更改表的存儲引擎、刪除表的外鍵約束等。
常用的語法格式如下:
ALTER?TABLE??[修改選項]
修改選項的語法格式如下:
{?ADD?COLUMN?? |?CHANGE?COLUMN??? |?ALTER?COLUMN??{?SET?DEFAULT??|?DROP?DEFAULT?} |?MODIFY?COLUMN?? |?DROP?COLUMN? |?RENAME?TO? |?CHARACTER?SET? |?COLLATE??}
添加字段
隨著業務的變化,可能需要在已經存在的表中添加新的字段,一個完整的字段包括字段名、數據類型、完整性約束。添加字段的語法格式如下:
ALTER?TABLE??ADD???[約束條件]?[FIRST|AFTER?已存在的字段名];
新字段名為需要添加的字段的名稱;FIRST 為可選參數,其作用是將新添加的字段設置為表的第一個字段;AFTER 為可選參數,其作用是將新添加的字段添加到指定的已存在的字段名的后面。
【實例 1】使用 ALTER TABLE 修改表 tb_emp1 的結構,在表的第一列添加一個 int 類型的字段 col1,輸入的 SQL 語句和運行結果如下所示。
mysql>?ALTER?TABLE?tb_emp1 ????->?ADD?COLUMN?col1?INT?FIRST; Query?OK,?0?rows?affected?(0.94?sec) Records:?0??Duplicates:?0??Warnings:?0 mysql>?DESC?tb_emp1; +--------+-------------+------+-----+---------+-------+ |?Field??|?Type????????|?Null?|?Key?|?Default?|?Extra?| +--------+-------------+------+-----+---------+-------+ |?col1???|?int(11)?????|?YES??|?????|?NULL????|???????| |?id?????|?int(11)?????|?YES??|?????|?NULL????|???????| |?name???|?varchar(25)?|?YES??|?????|?NULL????|???????| |?deptId?|?int(11)?????|?YES??|?????|?NULL????|???????| |?salary?|?float???????|?YES??|?????|?NULL????|???????| +--------+-------------+------+-----+---------+-------+ 5?rows?in?set?(0.00?sec)
提示:“FIRST 或 AFTER 已存在的字段名”用于指定新增字段在表中的位置,如果 SQL 語句中沒有這兩個參數,則默認將新添加的字段設置為數據表的最后列。
【實例 2】使用 ALTER TABLE 修改表 tb_emp1 的結構,在一列 name 后添加一個 int 類型的字段 col2,輸入的 SQL 語句和運行結果如下所示。
mysql>?ALTER?TABLE?tb_emp1 ????->?ADD?COLUMN?col2?INT?AFTER?name; Query?OK,?0?rows?affected?(0.50?sec) Records:?0??Duplicates:?0??Warnings:?0 mysql>?DESC?tb_emp1; +--------+-------------+------+-----+---------+-------+ |?Field??|?Type????????|?Null?|?Key?|?Default?|?Extra?| +--------+-------------+------+-----+---------+-------+ |?col1???|?int(11)?????|?YES??|?????|?NULL????|???????| |?id?????|?int(11)?????|?YES??|?????|?NULL????|???????| |?name???|?varchar(25)?|?YES??|?????|?NULL????|???????| |?col2???|?int(11)?????|?YES??|?????|?NULL????|???????| |?deptId?|?int(11)?????|?YES??|?????|?NULL????|???????| |?salary?|?float????????|?YES??|?????|?NULL????|???????| +--------+-------------+------+-----+---------+-------+ 6?rows?in?set?(0.00?sec)
可以看到,表 tb_emp1 中增加了一個名稱為 col2 的字段,其位置在指定的 name 字段后面,添加字段成功。
修改字段數據類型
修改字段的數據類型就是把字段的數據類型轉換成另一種數據類型。在 MySQL 中修改字段數據類型的語法規則如下:
ALTER?TABLE??MODIFY??
其中,表名指要修改數據類型的字段所在表的名稱,字段名指需要修改的字段,數據類型指修改后字段的新數據類型。
【實例 3】使用 ALTER TABLE 修改表 tb_emp1 的結構,將 name 字段的數據類型由 VARCHAR(22) 修改成 VARCHAR(30),輸入的 SQL 語句和運行結果如下所示。
mysql>?ALTER?TABLE?tb_emp1 ????->?MODIFY?name?VARCHAR(30); Query?OK,?0?rows?affected?(0.15?sec) Records:?0??Duplicates:?0??Warnings:?0 mysql>?DESC?tb_emp1; +--------+-------------+------+-----+---------+-------+ |?Field??|?Type????????|?Null?|?Key?|?Default?|?Extra?| +--------+-------------+------+-----+---------+-------+ |?col1???|?int(11)?????|?YES??|?????|?NULL????|???????| |?id?????|?int(11)?????|?YES??|?????|?NULL????|???????| |?name???|?varchar(30)?|?YES??|?????|?NULL????|???????| |?col2???|?int(11)?????|?YES??|?????|?NULL????|???????| |?deptId?|?int(11)?????|?YES??|?????|?NULL????|???????| |?salary?|?float????????|?YES??|?????|?NULL????|???????| +--------+-------------+------+-----+---------+-------+ 6?rows?in?set?(0.00?sec)
語句執行后,發現表 tb_emp1 中 name 字段的數據類型已經修改成 VARCHAR(30),修改成功。
刪除字段
刪除字段是將數據表中的某個字段從表中移除,語法格式如下:
ALTER?TABLE??DROP?;
其中,字段名指需要從表中刪除的字段的名稱。
【實例 4】使用 ALTER TABLE 修改表 tb_emp1 的結構,刪除 col2 字段,輸入的 SQL 語句和運行結果如下所示。
mysql>?ALTER?TABLE?tb_emp1 ????->?DROP?col2; Query?OK,?0?rows?affected?(0.53?sec) Records:?0??Duplicates:?0??Warnings:?0 mysql>?DESC?tb_emp1; +--------+-------------+------+-----+---------+-------+ |?Field??|?Type????????|?Null?|?Key?|?Default?|?Extra?| +--------+-------------+------+-----+---------+-------+ |?col1???|?int(11)?????|?YES??|?????|?NULL????|???????| |?id?????|?int(11)?????|?YES??|?????|?NULL????|???????| |?name???|?varchar(30)?|?YES??|?????|?NULL????|???????| |?deptId?|?int(11)?????|?YES??|?????|?NULL????|???????| |?salary?|?float????????|?YES??|?????|?NULL????|???????| +--------+-------------+------+-----+---------+-------+ 5?rows?in?set?(0.00?sec)
修改字段名稱
MySQL 中修改表字段名的語法規則如下:
ALTER?TABLE??CHANGE???;
其中,舊字段名指修改前的字段名;新字段名指修改后的字段名;新數據類型指修改后的數據類型,如果不需要修改字段的數據類型,可以將新數據類型設置成與原來一樣,但數據類型不能為空。
【實例 5】使用 ALTER TABLE 修改表 tb_emp1 的結構,將 col1 字段名稱改為 col3,同時將數據類型變為 CHAR(30),輸入的 SQL 語句和運行結果如下所示。
mysql>?ALTER?TABLE?tb_emp1 ????->?CHANGE?col1?col3?CHAR(30); Query?OK,?0?rows?affected?(0.76?sec) Records:?0??Duplicates:?0??Warnings:?0 mysql>?DESC?tb_emp1; +--------+-------------+------+-----+---------+-------+ |?Field??|?Type????????|?Null?|?Key?|?Default?|?Extra?| +--------+-------------+------+-----+---------+-------+ |?col3???|?char(30)????|?YES??|?????|?NULL????|???????| |?id?????|?int(11)?????|?YES??|?????|?NULL????|???????| |?name???|?varchar(30)?|?YES??|?????|?NULL????|???????| |?deptId?|?int(11)?????|?YES??|?????|?NULL????|???????| |?salary?|?float????????|?YES??|?????|?NULL????|???????| +--------+-------------+------+-----+---------+-------+ 5?rows?in?set?(0.01?sec)
CHANGE 也可以只修改數據類型,實現和 MODIFY 同樣的效果,方法是將 SQL 語句中的“新字段名”和“舊字段名”設置為相同的名稱,只改變“數據類型”。
提示:由于不同類型的數據在機器中的存儲方式及長度并不相同,修改數據類型可能會影響數據表中已有的數據記錄,因此,當數據表中已經有數據時,不要輕易修改數據類型。
修改表名
MySQL 通過 ALTER TABLE 語句來實現表名的修改,語法規則如下:
ALTER?TABLE??RENAME?[TO]?;
其中,TO 為可選參數,使用與否均不影響結果。
【實例 6】使用 ALTER TABLE 將數據表 tb_emp1 改名為 tb_emp2,輸入的 SQL 語句和運行結果如下所示。
mysql>?ALTER?TABLE?tb_emp1 ????->?RENAME?TO?tb_emp2; mysql>?SHOW?TABLES; +--------------------+ |?Tables_in_test_db??| +--------------------+ |?tb_emp2????????????| +--------------------+ 1?rows?in?set?(0.00?sec)
提示:用戶可以在修改表名稱時使用 DESC 命令查看修改后兩個表的結構,修改表名并不修改表的結構,因此修改名稱后的表和修改名稱前的表的結構是相同的。
【相關推薦:mysql視頻教程】