MySQL ordnet vorhandene Tabellenspalten an

70

Wie kann ich die Position einer bestimmten vorhandenen Spalte in der MySQL- Tabelle ändern ?

Ex: Ich möchte die Spalte verschieben Benutzernamen stattdessen sein , nachdem alle Spalten von seiner aktuellen Position oder ich möchte es vor jeder bestimmten Spalte in meinem Tisch.

Barry
quelle

Antworten:

103

Sie können die Reihenfolge der Spalten ändern, wenn Sie möchten.

Wenn Ihre Benutzername-Spalte varchar (255) lautet, dann:

alter table `mytable` 
change column username username varchar(255) after `somecolumn`;

Wenn es hilft, eine Tabellendefinition besser zu lesen, warum dann nicht?

ceteras
quelle
1
Wenn Sie altes phpmyadmin verwenden, können Sie zur Registerkarte "Struktur" gehen und dann Ihre Spalte bearbeiten. Klicken Sie einfach auf (Speichern), dann auf "Bearbeiten" und fügen Sie "... nach einer Spalte" hinzu. phpmyadmin bereitet Ihre SQL vor und behält die Einstellungen wie "varchar (255)" bei. z.B. Sie erhalten "" mytable Ändern des Benutzernamens der Tabellenänderungsspalte Benutzername varchar (255) "" und fügen ihn dann so hinzu, dass er "" mytable Ändern des Benutzernamens der Tabellenspaltenspalte Benutzername varchar (255) nach einer Spalte "" lautet.
Daniel Unterberger
4
ALTER TABLE ... MODIFYist vorzuziehen, obwohl ALTER TABLE ... CHANGEfunktioniert. Der Grund dafür ist, dass letzteres eine zusätzliche Funktion zum Ändern des Spaltennamens bietet, wodurch Sie mehr eingeben können (was fehleranfällig ist, da Sie möglicherweise versehentlich den Spaltennamen ändern :-)
Devy
46

Danke Jungs für all eure Antwort, ich bin schon fertig damit.

ALTER TABLE tbl_user MODIFY gender char(1) AFTER username;

Nun, es ist so, als würde man seinen Tisch organisieren, oder? Sie möchten nicht, dass sich Ihr Primärschlüsselfeld in der letzten Reihenfolge Ihrer Tabelle befindet. Zumindest weiß ich, wie ich es konfigurieren kann, wenn ich jemals auf dieses Problem stoße. Ich versuche, mich in einer textbasierten Datenbank zu verwenden und verwende keine GUI für jetzt.

Nochmals vielen Dank Jungs :)

Barry
quelle
20

Verwenden Sie einfach diese Abfrage

alter table `admin` modify id int(11) first;

oder

alter table `admin` modify id int(11) after `some_column`;
pradeep
quelle
2
ALTER TABLE ... MODIFYÄndern Sie nur den Spaltentyp und die Reihenfolge, daher ist dies vorzuziehen, ALTER TABLE ... CHANGEda auch das Ändern des Spaltennamens hinzugefügt wird (wodurch Sie mehr eingeben).
Devy
9

Ihr SQL sollte folgendermaßen aussehen:

ALTER TABLE `Customers` MODIFY `UserName` INT (11) AFTER `Orders`

Getan! Eine Zeile ändert die Position und es gibt nichts anderes zu tun.


Ich rate von der Empfehlung von @ rahim-asgari abALTER TABLE MYTABLE ADD MYFILED INT( 5 ) NOT NULL AFTER POSITION , da Sie:

  1. Fügen Sie ein neues Feld hinzu
  2. Kopieren Sie die Daten des alten Feldes in das neue Feld
  3. Ändern Sie alle Einschränkungen / Indizes
  4. Altes Feld löschen

Syntax:

ALTER TABLE `TableName` MODIFY `FieldToBeMoved` [SAME FIELD SETTINGS] [ACTION] `TargetPosition`
  • [SAME FIELD SETTINGS]
    Bezieht sich auf die Konfiguration Ihres Feldes. TINYINT, VARCHAR, TEXT usw. Denken Sie daran, die Größe anzugeben. Ej.varchar (255)

  • [ACTION]
    Sie können ein Feld BEFOREoder AFTERein bestimmtes Feld verschieben.
    Ersetzen für BEFOREoder AFTERentsprechend.


BEISPIEL

Wenn dein...

  • Tabellenname: Customers
  • Zu bewegendes Feld: UserName
  • UserName die Einstellungen: int(11)
  • Zielposition (letztes Feld der Tabelle): Orders
Omar
quelle
5

ALTER TABLE [tbl_name] MODIFY|CHANGE [column definition] [AFTER|BEFORE] [a_column]beides würde funktionieren. MODIFYDies ist vorzuziehen, wenn Sie nur die Spaltenreihenfolge ändern, aber nicht umbenennen möchten. Außerdem können Sie NICHT mehrere Spalten in einer einzigen ALTER TABLE-Anweisung neu anordnen. IE, um ganzzahlige Spalten col1, col2, col3 neu anzuordnen, um in der Reihenfolge von col3, col2, col1 zu sein, müssen Sie tun

ALTER TABLE tbl_name MODIFY col3 int FIRST; ALTER TABLE tbl_name MODIFY col2 int AFTER col3;

Devy
quelle
-5

Sie können die Reihenfolge der vorhandenen Spalten nicht ändern.

Sie können jedoch die Spalte löschen, in der Sie die Position ändern möchten, und diesen Befehl verwenden, um sie an der gewünschten Position hinzuzufügen.

ALTER TABLE `MYTABLE` ADD `MYFILED` INT( 5 ) NOT NULL AFTER `POSITION` 

oder

um ein Feld am Anfang der Tabelle hinzuzufügen

ALTER TABLE `MYTABLE` ADD `MYFIELD` INT( 5 ) NOT NULL FIRST 
rahim asgari
quelle
+1: Spaltenreihenfolge ist völlig ästhetisch, und das Ändern dieser Reihenfolge hat keinen Vorteil
OMG Ponies
5
@OMG Ponys Hast du jemals gedacht, dass er vielleicht die Reihenfolge für "ästhetische" Zwecke ändern möchte? Sie können die Reihenfolge ändern. Dafür gibt es viele Antworten. Diese Antwort ist nicht gut.
NVG
5
Basierend auf den anderen Antworten denke ich, dass es einfach nicht wahr ist, dass "Sie die Reihenfolge der vorhandenen Spalten nicht ändern können"
kris