Wenn ich eine Tabelle mit den Spalten habe:
id | name | created_date
und möchte eine Spalte hinzufügen, benutze ich:
alter table my_table add column email varchar(255)
Dann wird die Spalte nach dem created_date
Säule.
Kann ich die Position für die neue Spalte auf irgendeine Weise angeben? z.B. so kann ich es nach name
hinzufügen und eine Tabelle wie folgt erhalten:
id | name | email | created_date
ALTER TABLE ADD COLUMN
fügt nur die neue Spalte am Ende als letzte hinzu. Um eine neue Spalte an einer anderen Position zu erstellen, müssen Sie die Tabelle neu erstellen und die Daten aus der alten/aktuellen Tabelle in diese neue Tabelle kopieren.
Sie müssen die Tabelle neu erstellen, wenn Sie eine bestimmte Reihenfolge wünschen. Mach einfach so etwas wie:
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;
Erstellen Sie nach Bedarf Indizes usw.
Wenn Sie dies nur für das Aussehen wünschen, fällt es mir leichter, eine Ansicht für jede Tabelle mit der gewünschten Reihenfolge der Spalten beizubehalten und anstelle der Tabelle eine Auswahl daraus zu treffen.
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;
Für alle anderen Zwecke (wie Einfügen, Vereinigen) ist es besser, immer die Spaltenliste anzugeben.
-- 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);