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

108

Ich habe die MySQL-Dokumentation auf 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
-- ???
Jhonny D. Cano -Leftware-
quelle

Antworten:

134

Versuchen:

 ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'  
Rufinus
quelle
12
Es scheint gut zu funktionieren, aber gibt es eine andere Möglichkeit, dies ohne die Spaltendefinition zu tun?
Jhonny D. Cano -Leftware-
15
Diese Lösung kann die automatischen Inkremente unterbrechen.
Workdreamer
13
Beachten Sie, dass das Ändern eines Kommentars zu einer vollständigen Neukonstruktion der Tabelle führt. Sie können sich also dafür entscheiden, ohne es auf einem sehr großen Tisch zu leben.
Courtney Miles
2
@MarcusPope es ist unmöglich. Siehe dba.stackexchange.com/questions/78268/…
gaRex
5
@ user2045006 Das ist nicht (oder nicht mehr) wahr, solange die Spaltendefinition genau mit der vorhandenen Definition übereinstimmt. Kommentare können hinzugefügt werden, ohne eine Tabellenrekonstruktion zu verursachen.
Torben
36

Sie können MODIFY COLUMNdies verwenden. Mach einfach...

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

Ersetzen:

  • YourTable mit dem Namen Ihres Tisches
  • your_column mit dem Namen Ihres Kommentars
  • your_previous_column_definitionmit der column_definition der Spalte , die ich empfehle, über einen SHOW CREATE TABLE YourTableBefehl abzurufen und wörtlich zu kopieren, um Fallen 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)

* Wann immer Sie MODIFYoder CHANGEKlauseln in einer ALTER TABLEAnweisung verwenden, empfehle ich Ihnen, die Spaltendefinition aus der Ausgabe einer SHOW CREATE TABLEAnweisung zu kopieren . Dies schützt Sie davor, versehentlich einen wichtigen Teil Ihrer Spaltendefinition zu verlieren, indem Sie nicht erkennen, dass Sie ihn in Ihre MODIFYoder- CHANGEKlausel aufnehmen müssen. Wenn Sie beispielsweise MODIFYeine AUTO_INCREMENTSpalte verwenden, müssen Sie den AUTO_INCREMENTModifikator in der MODIFYKlausel erneut explizit angeben , da die Spalte sonst keine AUTO_INCREMENTSpalte mehr ist. Wenn die Spalte als Wert definiert ist NOT NULLoder einen DEFAULTWert hat, müssen diese Details beim Ausführen einer MODIFYoder CHANGEin der Spalte angegeben werden, da sie sonst verloren gehen.

Mark Amery
quelle
13

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. Exportieren Sie alle in eine CSV
  2. Öffnen Sie es in Ihrem bevorzugten CSV-Editor

Hinweis: Sie können nur eine Tabelle verbessern, wenn Sie dies bevorzugen

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

Arbeitsträumer
quelle
3
Laut einem neuen Benutzer, der nicht genug Repräsentanten hat, um zu kommentieren, dump.aux_comment,muss sein column_comment,. Würde es Ihnen etwas ausmachen zu prüfen, ob es wahr ist?
nhahtdh
Entschuldige mich für den Fehler.
Workdreamer
Wenn Sie eine ID auto_increment haben, müssen Sie dies natürlich tun ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';. Dies unterbricht keine automatischen Inkremente.
Mpoletto
@workdreamer Ich bezog mich auf die Rufinus-Lösung, von der Sie sagen, dass sie das automatische Inkrement unterbrechen könnte. Nein, die gegebene Lösung bricht es nicht.
Mpoletto
1
Super toll!
Rizki Noor Hidayat Wijaya
4

Das Informationsschema ist nicht der Ort, an dem diese Dinge behandelt werden (siehe DDL-Datenbankbefehle).

Wenn Sie einen Kommentar hinzufügen, müssen Sie die Tabellenstruktur ändern (Tabellenkommentare).

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 Datenbank INFORMATION_SCHEMA enthält mehrere schreibgeschützte Tabellen. Es handelt sich tatsächlich um Ansichten, nicht um Basistabellen, daher sind ihnen keine Dateien zugeordnet, und Sie können keine Trigger für sie festlegen. Es gibt auch 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-Operationen für diese ausführen.

Kapitel 21 INFORMATION_SCHEMA-Tabellen

mpoletto
quelle
-3

Gemäß der Dokumentation können Sie Kommentare nur zum Zeitpunkt der Tabellenerstellung hinzufügen. Es ist also ein Muss, eine Tabellendefinition zu haben. Eine Möglichkeit, es mithilfe des Skripts zu automatisieren, um die Definition zu lesen und Ihre Kommentare zu aktualisieren.

Referenz:

http://cornempire.net/2010/04/15/add-comments-to-column-mysql/

http://bugs.mysql.com/bug.php?id=64439

Nageswara Rao
quelle
2
Diese Antwort ist falsch (es ist möglich, die Kommentare nach der Tabellenerstellung zu aktualisieren, auch wenn dies langwierig ist) und sie verweist nur auf andere Websites, sodass sie im Hinblick auf eine Stapelüberlauf-Antwort nicht hilfreich ist.
Lukas Eder