MySQL中ALTER命令小結。
1.表操作
#修改表名
語法: ALTER TABLE table_name RENAME [TO] new_table_name; 舉例: ALTER TABLE student RENAME TO students; --將student表的名稱更改為students
2.列(字段)操作
#修改字段類型
語法: ALTER TABLE table_name MODIFY coloumn_name new_data_type; 舉例: ALTER TABLE students MODIFY s_name VARCHAR(30); --將students表的s_name字段的類型更改為VARCHAR(30)
#修改字段位置
語法: ALTER TABLE table_name MODIFY coloumn_name data_type AFTER|FIRST [coloumn_name]; 舉例: ALTER TABLE students MODIFY s_name VARCHAR(30) AFTER s_id; --將s_name的位置更改到s_id列的後面 ALTER TABLE students MODIFY s_name VARCHAR(30) FIRST; --將s_name的位置更改到首列
#增加字段
語法: ALTER TABLE table_name ADD new_column_name data_type AFTER|FIRST [coloumn_name] 舉例: ALTER TABLE students ADD s_age INT AFTER s_name; --在students表中的s_name列後面增加一列,列名為s_age,類型為INT。
#刪除字段
語法: ALTER TABLE table_name DROP coloumn_name data_type; 舉例: ALTER TABLE students DROP s_name; --刪除students表中的s_name字段
注:MySQL不能直接通過 ALTER 語句修改列名稱
3.約束操作
#添加主鍵約束
語法: ALTER TABLE table_name ADD PRIMARY KEY(coloumn_name); 舉例: ALTER TABLE students ADD PRIMARY KEY() --為students表添加主鍵s_id
#刪除主鍵約束
語法: ALTER TABLE table_name DROP PRIMARY KEY; 舉例: ALTER TABLE students DROP PRIMARY KEY;--刪除students表中的主鍵
#添加外鍵約束
語法: ALTER TABLE table_name ADD [CONSTRAINT fk_name] FOREIGN KEY(coloumn_name) REFERENCES table2_name(coloumn2_name) [ON DELETE {CASCADE|SET NULL|NO ACTION|RESTRICT}] [ON UPDATE {CASCADE|SET NULL|NO ACTION|RESTRICT}] 舉例: ALTER TABLE score ADD CONSTRAINT fk_score_s_id FOREIGN KEY(s_id) REFERENCES students(s_id) ON DELETE RESTRICT ON UPDATE CASCADE;--為score表的s_id列增加外鍵約束,關聯students表的s_id,級聯更新,不級聯刪除
注: 添加外鍵約束時,添加外鍵的列的所有數據必須能夠在父表中找到,否則添加會失敗。
#刪除外鍵約束
語法: ALTER TABLE table_name DROP FOREIGN KEY fk_name; 舉例: ALTER TABLE score DROP FOREIGN KEY fk_score_s_id; --刪除score表中名為fk_score_s_id的外鍵約束。
注:外鍵約束名可以通過命令SHOW CREATE TABLE table_name進行查看。
#添加非空約束
語法: ALTER TABLE table_name MODIFY coloumn_name data_type NOT NULL; 舉例: ALTER TABLE students MODIFY s_name VARCHAR(30) NOT NULL;
#取消非空約束
語法: ALTER TABLE table_name MODIFY coloumn_name data_type NULL; 舉例: ALTER TABLE student MODIFY s_name VARCHAR(30) NULL;
#添加默認值約束
語法: ALTER TABLE table_name ALTER coloumn_name SET DEFAULT default_value; 舉例: ALTER TABLE students ALTER s_grade SET DEFAULT '2013';
#刪除默認值約束
語法: ALTER TABLE table_name ALTER coloumn_name DROP DEFAULT; 舉例: ALTER TABLE students ALTER s_grade DROP DEFAULT;
#添加唯一性約束
語法: ALTER TABLE table_name MODIFY coloumn_name UNIQUE; 舉例: ALTER TABLE students MODIFY email data_type UNIQUE;
#刪除唯一性約束
語法: ALTER TABLE table_name DROP INDEX uk_constraint_name; 舉例: ALTER TABLE students DROP INDEX email;--刪除名稱為email的約束
注:某書上說可以通過類似於 ALTER TABLE students MODIFY email VARCHAR(30); 可以刪除唯一性約束,本人在MySQL5.6.30親測無效。
#添加自增約束
語法: ALTER TABLE table_name MODIFY coloumn_name data_type AUTO_INCREAMENT; 舉例: ALTER TABLE students MODIFY s_id INT AUTO_INCREAMENT;--為students表的s_id列添加自增約束
注: 添加自增約束時必須為自增字段設置唯一約束或主鍵約束或外鍵約束,且自增約束只針對於整數。
#刪除自增約束
語法: ALTER TABLE table_name MODIFY coloumn_name data_type; 舉例: ALTER TABLE students MODIFY id int;--刪除students表中id的自增約束。
#刪除約束的一般方法
#語法: ALTER TABLE table_name DROP INDEX constraint_name; #舉例: ALTER TABLE students DROP INDEX fk_s_id;--刪除名稱為fk_s_id的約束
注: 這種刪除的方法只適用於有約束名稱的約束,如FOREIGN KEY , UNIQUE KEY,而對於像NOT NULL , AUTO_INCREAMENT則只能用上面的方法。