ドキュメントからの私の推測は、単に長さの制約を増やすだけではvarchar
、列を追加するのと同じ問題は起こらないだろうということでしょう:
一部の操作では、一時テーブルを必要としないインプレースALTER TABLEが可能です。
しかし、それは、このSOの質問に対するコメントでは矛盾しているようです。
編集
少なくとも5.0では、長さを増やすには一時テーブル(または他の同等に高価な操作)が実際に必要であることを確認できると思います。
テストベッド:
create table my_table (id int auto_increment primary key, varchar_val varchar(10));
insert into my_table (varchar_val)
select 'HELLO'
from (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) s1,
(select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) s2,
(select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) s3,
(select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) s4,
(select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) s5,
(select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) s6;
結果:
alter table my_table modify varchar_val varchar(20);
Query OK, 1000000 rows affected (2.91 sec)
alter table my_table add int_val int;
Query OK, 1000000 rows affected (2.86 sec)