ALTER TABLE用于更改原有的表结构。例如,可以增加或删减列,创建或取消索引,更改原有列的类型,重新命名列或表,还可以更改表的描述和表的类型。成熟的数据库设计,数据库的表结构一般不会发生变化。数据库的表结构一旦发生变化,基于该表的视图、触发器、存储过程将直接受到影响,甚至导致应用程序的修改。
ALTER TABLE语句的基本格式如下:
其中,table_name为要修改表的表名。
ALTER TABLE语句中的修改子句可以包含以下几类:
3.8.1 添加、修改、删除字段
1.添加新字段
向表添加新字段时,通常需要指定新字段在表中的位置。向表添加新字段的语法格式如下:
alter table 表名 add 新字段名 新数据类型 [新约束条件] [first | after 旧字段名]
其中ADD子句:向表中增加新列。例如,在表t1中增加新的一列a:
ALTER TABLE t1 ADD COLUMN a TINYINT NULL;
(1)增加字段,字段处于最后一个位置。
Alter table 表名add 字段名 数据类型 null/not null;
首先看一下原来的xsb表结构:
Desc xsb;
xsb原表结构如图3.20所示。
图3.20 xsb原表结构
执行命令:Alter table xsb add 新增字段char(10)null;,如图3.21所示。
图3.21 执行命令:Alter table xsb add 新增字段 char(10)null;
新增字段后,再查看xsb表结构,如图3.22所示。
图3.22 表结构中增加字段
发现”新增字段”添加在表结构末尾。
(2)在表的第一个位置增加字段。
Alter table 表名add 字段名 数据类型first;
执行命令:alter table xsb add 首字段char(10)null first;,如图3.23所示。
图3.23 在表第一个位置增加字段
再查看xsb表结构,如图3.24所示。
图3.24 首字段表结构变化
(3)在表的指定字段之后增加字段。
Alter table 表名add 字段名 数据类型 after 列名2;
执行命令:alter table xsb add 中间字段 char(10)null after 专业;,如图3.25所示。
图3.25 在指定字段之后增加字段
再查看xsb表结构,中间字段如图3.26所示。
图3.26 中间字段
2.修改字段名(或者数据类型)
(1)修改字段的名字。
Alter table 表名change旧属性名 新属性名 旧数据类型;
例如,要首先创建表:把一个数据类型为INTEGER列的名称从a变更到b:
create table t1(
aa int null,
name char(20),
csrq datetime
);
执行结果如图3.27所示。
图3.27 创建表
执行命令:ALTER TABLE t1 CHANGE aa bb INTEGER;,如图3.28所示。
图3.28 修改字段名
(2)修改字段的数据类型。
如果仅对字段的数据类型进行修改,可以使用下面的语法格式:
alter table 表名 modify 字段名 新数据类型
MODIFY子句:修改指定列的数据类型。例如,把一个列的数据类型改为BIGINT:(www.xing528.com)
执行命令:ALTER TABLE t1 MODIFY bb BIGINT NOT NULL;,如图3.29所示。
图3.29 修改字段的数据类型
注意:若表中该列所存数据的数据类型与将要修改的列的类型冲突,则发生错误。例如,原来CHAR类型的列要修改成INT类型,而原来列值中有字符型数据“a”,则无法修改。
(3)同时修改字段名字和属性。
Alter table 表名 change 旧属性名 新属性名 新数据类型;
执行Alter table t1 change bb kk char(10);命令语句后,表结构如图3.30所示。
图3.30 同时修改字段名字和属性
(4)修改字段的顺序。
Alter table 表名 modify 属性名1 数据类型 first|after 属性名2;
执行Alter table t1 modify kk char(10)after name;命令语句后,表结构如图3.31所示。
图3.31 修改后字段的顺序
注意:属性名1和属性名2必须是表中已存在的字段名。
(5)删除字段。
删除表字段的语法格式如下:
alter table 表名 drop 字段名;
执行alter table t1 drop kk;命令语句后,表结构如图3.32所示。
图3.32 删除字段KK后的表结构
【例3.7】假设已经在数据库PXSCJ中创建了表XSB,表中存在“姓名”列。在表XSB中增加“奖学金等级”列,并将表中的“姓名”列删除。
参考答案:
3.8.2 修改约束条件
1.添加约束条件
向表的某个字段添加约束条件的语法格式如下(其中约束类型可以是唯一性约束、主键约束及外键约束):
alter table 表名 add constraint 约束名 约束类型(字段名)
(1)创建表时设置外键。
Create table 表名(属性名 数据类型 auto_increment,…..
Constraint 外键约束名 foreign key(列名)references 表名(列名);
)
(2)对建好的表修改增加约束(外键约束)。
Alter table 表名 add constraint 约束名 foreign key(列名)references 表名(列名);
执行命令语句:Alter table cjb add constraint fk_xh foreign key(学号)references xsb(学号),
add constraint fk_kch foreign key(课程号)references kcb(课程号);,将对cjb表的学号参照xsb表的学号,cjb表的课程号参照kcb表的课程分别建立外键约束fk_xh和fk_kch,如图3.33所示。
图3.33 修改增加约束
2.删除约束条件
删除约束条件的语法格式如下:
Alter table 表名 drop 约束类型 约束名;
(1)删除表的主键约束条件语法格式比较简单,语法格式如下:
alter table 表名 drop primary key;
(2)删除表的外键约束时,需指定外键约束名称,语法格式如下(注意需指定外键约束名):
alter table 表名 drop foreign key 约束名;
(3)若要删除表字段的唯一性约束,实际上只需删除该字段的唯一性索引即可,语法格式如下(注意需指定唯一性索引的索引名):
Alter table 表名 drop index 唯一索引名;
(4)修改表的其他选项:
alter table 表名 engine=新的存储引擎类型
alter table 表名 default charset=新的字符集
alter table 表名 auto_increment=新的初始值
alter table 表名 pack_keys=新的压缩类型
3.8.3 修改表名
修改表名的语法格式较为简单,语法格式如下:
rename table旧表名to新表名
该命令等效于:alter table 旧表名 rename 新表名
RENAME子句:修改该表的表名。例如,将表a改名为b:
ALTER TABLE a RENAME b;
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。