webentwicklung-frage-antwort-db.com.de

Wie verschiebe ich Spalten in einer MySQL-Tabelle?

Derzeit habe ich die folgende MySQL-Tabelle: Employees (empID, empName, department);

Ich möchte die Tabelle folgendermaßen ändern: Employees (empID, department, empName);

Wie kann dies mit ALTER Anweisungen geschehen?

Hinweis: Ich möchte nur die Spaltenpositionen ändern.

182
Sumit Gupta

Wenn empName eine VARCHAR (50) -Spalte ist:

ALTER TABLE Employees MODIFY COLUMN empName VARCHAR(50) AFTER department;

[~ # ~] edit [~ # ~]

Gemäß den Kommentaren können Sie dies auch tun:

ALTER TABLE Employees CHANGE COLUMN empName empName VARCHAR(50) AFTER department;

Beachten Sie, dass die Wiederholung von empName absichtlich ist. Sie müssen MySQL mitteilen, dass Sie denselben Spaltennamen beibehalten möchten.

Sie sollten sich bewusst sein, dass beide Syntaxversionen spezifisch für MySQL sind. Sie funktionieren beispielsweise in PostgreSQL oder vielen anderen DBMS nicht.

Eine weitere Änderung: Wie von @Luis Rossi in einem Kommentar hervorgehoben, müssen Sie die geänderte Spaltendefinition direkt vor dem Modifikator AFTER vollständig angeben. Die obigen Beispiele haben nur VARCHAR(50), aber wenn Sie andere Merkmale (wie NOT NULL Oder einen Standardwert) benötigen, müssen Sie diese ebenfalls einschließen. Konsultieren Sie die Dokumente auf ALTER TABLE für weitere Informationen.

308
Ted Hopp

Spaltenposition ändern:

ALTER TABLE Employees 
   CHANGE empName empName VARCHAR(50) NOT NULL AFTER department;

Wenn Sie es an die erste Position verschieben müssen, müssen Sie den Begriff FIRST am Ende der Abfrage ALTER TABLE CHANGE [COLUMN] verwenden:

ALTER TABLE UserOrder 
   CHANGE order_id order_id INT(11) NOT NULL FIRST;
62
Igor Kostin

in der Strukturansicht einer Tabelle bietet phpMyAdmin hierfür eine grafische Benutzeroberfläche. Aktivieren Sie das Kontrollkästchen, um die zu verschiebende Spalte auszuwählen, und klicken Sie auf die Änderungsaktion am unteren Rand der Spaltenliste. Sie können dann alle Spalteneigenschaften ändern und finden die Funktion "Spalte verschieben" ganz rechts auf dem Bildschirm.

Das alles baut natürlich nur die Abfragen in die perfekt gute Top-Antwort auf, aber GUI-Fans werden die Alternative vielleicht zu schätzen wissen.

meine phpMyAdmin Version ist 4.1.7

11
Matt Bracewell

Ich musste dies für eine Spalte ausführen, die in den späteren Phasen eines Produkts für mehr als 10 Tabellen eingeführt wurde. Also schrieb ich dieses schnelle, unordentliche Skript, um den Änderungsbefehl für alle 'relevanten' Tabellen zu generieren.

SET @NeighboringColumn = '<YOUR COLUMN SHOULD COME AFTER THIS COLUMN>';

SELECT CONCAT("ALTER TABLE `",t.TABLE_NAME,"` CHANGE COLUMN `",COLUMN_NAME,"` 
`",COLUMN_NAME,"` ", c.DATA_TYPE, CASE WHEN c.CHARACTER_MAXIMUM_LENGTH IS NOT 
NULL THEN CONCAT("(", c.CHARACTER_MAXIMUM_LENGTH, ")") ELSE "" END ,"  AFTER 
`",@NeighboringColumn,"`;")
FROM information_schema.COLUMNS c, information_schema.TABLES t
WHERE c.TABLE_SCHEMA = '<YOUR SCHEMA NAME>'
AND c.COLUMN_NAME = '<COLUMN TO MOVE>'
AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
AND c.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_TYPE = 'BASE TABLE'
AND @NeighboringColumn IN (SELECT COLUMN_NAME 
    FROM information_schema.COLUMNS c2 
    WHERE c2.TABLE_NAME = t.TABLE_NAME);
1
uchamp