列を持つテーブルがある場合:
id | name | created_date
列を追加したいので、次を使用します。
alter table my_table add column email varchar(255)
次に、列がcreated_date
列の後に追加されます。
新しい列の位置を指定する方法はありますか?例えばname
の後に追加して、次のようなテーブルを取得できます。
id | name | email | created_date
ALTER TABLE ADD COLUMN
は、最後の列として、最後に新しい列のみを追加します。別の位置に新しい列を作成するには、テーブルを再作成し、この新しいテーブルの古い/現在のテーブルからデータをコピーする必要があります。
特定の順序が必要な場合は、テーブルを再作成する必要があります。次のようなことをしてください:
alter table tablename rename to oldtable;
create table tablename (column defs go here);
insert into tablename (col1, col2, col3) select col2, col1, col3 from oldtable;
必要に応じてインデックスを作成します。
見た目だけにしたい場合は、テーブルごとにビューを希望の列の順序で保持し、テーブルではなくビューから選択する方が簡単だと思います。
create table my_table (
create view view_my_table as
select id, name, created_date from my_table;
-- adding a new column
begin;
alter table my_table add column email varchar(255);
drop view view_my_table;
create view view_my_table as
select id, name, email, created_date from my_table;
commit;
他のすべての目的(挿入、ユニオンなど)では、常に列リストを指定することをお勧めします。
-- bad
insert into my_table values (...);
(select * from my_table)
union all
(select * from my_table);
-- good
insert into my_table (id, name, email, created_date) values (...);
(select id, name, email, created_date from my_table)
union all
(select id, name, email, created_date from my_table);