第五章 ALTER
有些表中,我们已经存储了数据,可随着业务的发展,表的结构需要做一些改动。即不能丢失数据,又要做变动,怎么办呢?
一.为表添加主键
ALTER TABLE my_contacts
ADD COLUMN contact_id INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (contact_id);
说明:a.ALTER TABLE + tablename,表示对表做更改
b. ADD COLUMN +columnname,在表中增加列,FIRST表示列在表中的位置,此处可以使用SECOND,AFTER + columnname,LAST之类的词修饰,来确定新增加列的位置,默认情况为LAST;
二.修改表
CHANGE:可同时该表现有列的名称和数据类型
MODIFY:修改现有列的数据类型或位置
ADD:在当前表中添加一列
DROP:从表中删除某列
/*为表改名*/
ALTER TABLE projects RENAME TO project_list;
说明:ALTER TABLE + 原表名+RENAME TO +新表名;
/*修改表中列名和数据类型*/
ALTER TABLE project_list
CHANGE COLUMN descriptionfproj proj_desc VARCHAR(100),
CHANGE COLUMN contractoronjob con_name VARCHAR(30);
说明:a.ALTER TABLE +表名+CHANGE COLUMN +原列名+新列名+新列类型+约束;
b.一句ALTER TABLE中可加多个CHANGE;
c.注意转化列类型的时候,类型不匹配是转化不了的。但是如果新列的长度比原列短,可能会造成数据别截断而遗失。
/*修改列的数据类型*/
ALTER TABLE project_list MODIFY COLUMN proj_desc VARCHAR(120);
说明:ALTER TABLE+表名+MODIFY COLUMN+列名+列类型。
/*删除表中的列*/
ALTER TABLE project_list DROP COLUMN start_date;
说明:ALTER TABLE+表名+DROP COLUMN+列名;
ALTER TABLE 改善表设计
/*my_contacts中增加两列*/
ALTER TABLE my_contacts
ADD COLUMN city VARCHAR(30) AFTER location,
ADD COLUMN station VARCHAR(20) AFTER city;
/*city的值去location中逗号前面部分*/
UPDATE my_contacts SET city = SUBSTRING_INDEX(location,',',1);
UPDATE my_contacts SET station = RIGHT(location,2);
/*删掉原有location列*/
ALTER TABLE my_contacts DROP COLUMN location;
至此,my_contacts表越来越符合实际需求了。
本文出自 “墨痕” 博客,转载请与作者联系!