除了可以更新行,可能还需要改变数据库中表的结构。要实现这个目的,可以利用灵活的ALTER TABLE语句。ALTER TABLE语句基本格式如下:
ALTER TABLE[IGNORE]tablename alteration[,alteration...]
请注意,在ANSI SQL中,每个ALTER TABLE语句只可实现一次修改,但是在MySQL中允许实现多次修改。每个修改子句可用于修改表的不同部分。
如果指定了IGNORE子句并且尝试的修改可能会产生重复的主键,第一个重复的主键将进入修改后的表,而其他重复的主键将被删除。如果没有指定(默认情况),该修改将失败并且被回滚。
使用该语句可以做不同类型的修改,这些修改如表10-5所示。
下面,我们看看ALTER TABLE语句的一些更常见的用法。
一个经常出现的情况是:特定的列空间没有“足够大”,不能容纳它必须容纳的数据。例如,在customers表中,已经允许名称可以达到50个字符。在开始接收一些数据后,我们可能发现一些名称因为太长而被截短了。我们可以通过改变该列的数据类型,使其为长度为70个字符,以弥补这个缺点:
alter table customers
modify name char(70)not null;
另一个经常出现的问题是需要新增加一列。如果当地引进图书营业税,Book-O-Rama要将税收额加到整个订单上,但是又要将图书税与订单分开。这样,我们可以在orders表中增加一个税收列(tax),如下所示:
alter table orders
add tax float(6,2)after amount;
删除一列也是经常出现的问题。要删除一行,只要加上如下语句即可:
alter table orders
drop tax;