it-swarm.com.de

Ändern Sie die MySQL-Tabelle, um Kommentare zu Spalten hinzuzufügen

Ich habe die MySQL-Dokumentation für ALTER TABLE überprüft und es scheint keine Möglichkeit zu geben, einen Kommentar zu einer Spalte hinzuzufügen oder zu ändern. Wie kann ich das machen?

-- for table
ALTER TABLE myTable COMMENT 'Hello World'

-- for columns
-- ???

versuchen:

 ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'  
114
Rufinus

Sie können dazu MODIFY COLUMN verwenden. Mach einfach...

ALTER TABLE YourTable
MODIFY COLUMN your_column
your_previous_column_definition COMMENT "Your new comment"

ersetzen:

  • YourTable mit dem Namen Ihrer Tabelle
  • your_column mit dem Namen Ihres Kommentars
  • your_previous_column_definition mit der column_definition der ich empfehle, via zu bekommen einen SHOW CREATE TABLE YourTable - Befehl und wörtliches Kopieren, um Überfüllungen zu vermeiden. *
  • Your new comment mit dem gewünschten Spaltenkommentar.

Beispielsweise...

mysql> CREATE TABLE `Example` (
    ->   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    ->   `some_col` varchar(255) DEFAULT NULL,
    ->   PRIMARY KEY (`id`)
    -> );
Query OK, 0 rows affected (0.18 sec)

mysql> ALTER TABLE Example
    -> MODIFY COLUMN `id`
    -> int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Look, I''m a comment!';
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE Example;
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                  |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Example | CREATE TABLE `Example` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Look, I''m a comment!',
  `some_col` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

* Wenn Sie in einer ALTER TABLE - Anweisung MODIFY oder CHANGE -Klauseln verwenden, sollten Sie die Spaltendefinition aus der Ausgabe einer SHOW CREATE TABLE - Anweisung kopieren. Dies schützt Sie vor dem versehentlichen Verlust eines wichtigen Teils Ihrer Spaltendefinition, da Sie nicht erkennen, dass Sie ihn in Ihre MODIFY - oder CHANGE -Klausel aufnehmen müssen. Wenn Sie beispielsweise eine AUTO_INCREMENT - Spalte MODIFY, müssen Sie den Modifikator AUTO_INCREMENT In der MODIFY -Klausel erneut explizit angeben, da sonst die Spalte nicht mehr angezeigt wird Sei eine AUTO_INCREMENT - Spalte. Wenn die Spalte als NOT NULL Definiert ist oder einen DEFAULT -Wert aufweist, müssen diese Details bei der Ausführung eines MODIFY oder CHANGE für die Spalte einbezogen werden oder sie werden verloren gehen.

31
Mark Amery

Skript für alle Felder in der Datenbank:

SELECT 
table_name,
column_name,
CONCAT('ALTER TABLE `',
        table_name,
        '` CHANGE `',
        column_name,
        '` `',
        column_name,
        '` ',
        column_type,
        ' ',
        IF(is_nullable = 'YES', '' , 'NOT NULL '),
        IF(column_default IS NOT NULL, concat('DEFAULT ', IF(column_default = 'CURRENT_TIMESTAMP', column_default, CONCAT('\'',column_default,'\'') ), ' '), ''),
        IF(column_default IS NULL AND is_nullable = 'YES' AND column_key = '' AND column_type = 'timestamp','NULL ', ''),
        IF(column_default IS NULL AND is_nullable = 'YES' AND column_key = '','DEFAULT NULL ', ''),
        extra,
        ' COMMENT \'',
        column_comment,
        '\' ;') as script
FROM
    information_schema.columns
WHERE
    table_schema = 'my_database_name'
ORDER BY table_name , column_name
  1. Alles in eine CSV exportieren
  2. Öffnen Sie es in Ihrem bevorzugten CSV-Editor

Anmerkung: Sie können sich auf nur eine Tabelle verbessern, wenn Sie dies vorziehen

Die von @Rufinus gegebene Lösung ist großartig, aber wenn Sie Auto-Inkremente haben, wird es brechen.

11
workdreamer

Die Antwort des Rufinus ist angemessen. Ich würde es vorziehen, MODIFY anstelle von CHANGE zu verwenden, wenn Sie den Namen der Spalte nicht ändern müssen.

Ich stimme dem Kommentar von Marcus Pope nicht zu. Das mysql-Informationsdatenbankschema oder ein Ort, an dem sich das Informationsschema befindet und der die Datendefinition einer Datenbank enthält, ist nicht der Ort, an dem diese Dinge behandelt werden. Das Informationsschema wird vom SGBD verwendet, um die Änderungen aufzuzeichnen, die für jeden DDL-Befehl erforderlich sind, der für die Datenbank ausgeführt wurde. Warum brauchen wir die DDL-Befehle?

In jeder relationalen Datenbank können zwei Arten von SQL-Befehlen verwendet werden: DML und DDL. Wenn Sie einen Kommentar hinzufügen, müssen Sie die Tabellenstruktur ändern.

Aus der MySQL 5.6-Dokumentation:

"INFORMATION_SCHEMA ist eine Datenbank in jeder MySQL-Instanz, in der Informationen zu allen anderen vom MySQL-Server verwalteten Datenbanken gespeichert werden. Die INFORMATION_SCHEMA-Datenbank enthält mehrere schreibgeschützte Tabellen. Es handelt sich tatsächlich um Ansichten und nicht um Basistabellen, sodass keine Dateien vorhanden sind Sie können keine Trigger für sie festlegen. Außerdem gibt es kein Datenbankverzeichnis mit diesem Namen.

Obwohl Sie INFORMATION_SCHEMA als Standarddatenbank mit einer USE-Anweisung auswählen können, können Sie nur den Inhalt von Tabellen lesen und keine INSERT-, UPDATE- oder DELETE-Vorgänge ausführen. "

Kapitel 21 INFORMATION_SCHEMA-Tabellen

3
mpoletto