Ubah tabel MySQL untuk menambahkan komentar pada kolom

109

Saya telah memeriksa Dokumentasi MySQL untuk ALTER TABLE dan sepertinya tidak menyertakan cara untuk menambah atau mengubah komentar ke kolom. Bagaimana saya bisa melakukan ini?

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

-- for columns
-- ???
Jhonny D. Cano -Leftware-
sumber

Jawaban:

134

mencoba:

 ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'  
Rufinus
sumber
12
Tampaknya berfungsi dengan baik, tetapi adakah cara lain untuk melakukannya tanpa menyertakan definisi kolom?
Jhonny D. Cano -Leftware-
15
Solusi ini dapat merusak kenaikan otomatis.
workdreamer
13
Perhatikan bahwa mengubah komentar akan menyebabkan konstruksi ulang tabel secara penuh. Jadi, Anda dapat memilih untuk hidup tanpanya di atas meja yang sangat besar.
Courtney Miles
2
@MarcusPope tidak mungkin. Lihat dba.stackexchange.com/questions/78268/…
gaRex
5
@ user2045006 Itu tidak (atau tidak lagi) benar, selama definisi kolom sama persis dengan definisi yang ada. Komentar dapat ditambahkan tanpa menyebabkan rekonstruksi tabel.
Torben
36

Anda dapat menggunakan MODIFY COLUMNuntuk melakukan ini. Kerjakan saja...

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

mengganti:

  • YourTable dengan nama tabel Anda
  • your_column dengan nama komentar Anda
  • your_previous_column_definitiondengan kolom_definisi , yang saya rekomendasikan melalui SHOW CREATE TABLE YourTableperintah dan menyalin kata demi kata untuk menghindari jebakan. *
  • Your new comment dengan kolom komentar yang Anda inginkan.

Sebagai contoh...

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)

* Setiap kali Anda menggunakan MODIFYatau CHANGEklausa dalam ALTER TABLEpernyataan, saya sarankan Anda menyalin definisi kolom dari keluaran SHOW CREATE TABLEpernyataan. Ini melindungi Anda dari kehilangan bagian penting dari definisi kolom Anda secara tidak sengaja dengan tidak menyadari bahwa Anda perlu memasukkannya ke dalam klausa MODIFYatau CHANGE. Misalnya, jika Anda MODIFYmemiliki AUTO_INCREMENTkolom, Anda perlu secara eksplisit menentukan AUTO_INCREMENTpengubah lagi dalam MODIFYklausa, atau kolom akan berhenti menjadi AUTO_INCREMENTkolom. Demikian pula, jika kolom didefinisikan sebagai NOT NULLatau memiliki DEFAULTnilai, detail ini perlu disertakan saat melakukan a MODIFYatau CHANGEpada kolom atau mereka akan hilang.

Mark Amery
sumber
14

Script untuk semua field di database:

SELECT 
table_name,
column_name,
CONCAT('ALTER TABLE `',
        TABLE_SCHEMA,
        '`.`',
        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 IN ('CURRENT_TIMESTAMP', 'CURRENT_TIMESTAMP()', 'NULL', 'b\'0\'', 'b\'1\''), 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. Ekspor semua ke CSV
  2. Buka di editor csv favorit Anda

Catatan: Anda hanya dapat meningkatkan ke satu tabel jika mau

Solusi yang diberikan oleh @Rufinus sangat bagus tetapi jika Anda memiliki peningkatan otomatis, itu akan merusaknya.

pekerja keras
sumber
3
Menurut pengguna baru yang tidak memiliki cukup perwakilan untuk berkomentar, dump.aux_comment,perlu column_comment,. Maukah Anda memeriksa apakah itu benar?
nhahtdh
Maaf atas kesalahannya.
workdreamer
Tentu saja, jika Anda memiliki auto_increment id, Anda perlu melakukannya ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';. Ini tidak merusak penambahan otomatis.
mpoletto
@workdreamer Saya mengacu pada solusi Rufinus yang menurut Anda dapat merusak peningkatan otomatis. Tidak, solusi yang diberikan tidak merusaknya.
mpoletto
1
Mengagumkan menakjubkan!
Rizki Noor Hidayat Wijaya
4

Skema informasi bukanlah tempat untuk menangani hal-hal ini (lihat perintah database DDL).

Saat Anda menambahkan komentar, Anda perlu mengubah struktur tabel (komentar tabel).

Dari dokumentasi MySQL 5.6:

INFORMATION_SCHEMA adalah database dalam setiap instance MySQL, tempat menyimpan informasi tentang semua database lain yang dipelihara oleh server MySQL. Pangkalan data INFORMATION_SCHEMA berisi beberapa tabel baca-saja. Mereka sebenarnya adalah tampilan, bukan tabel dasar, jadi tidak ada file yang terkait dengannya, dan Anda tidak dapat menyetel pemicunya. Juga, tidak ada direktori database dengan nama itu.

Meskipun Anda dapat memilih INFORMATION_SCHEMA sebagai database default dengan pernyataan USE, Anda hanya dapat membaca konten tabel, tidak melakukan operasi INSERT, UPDATE, atau DELETE.

Bab 21 Tabel INFORMATION_SCHEMA

mpoletto.dll
sumber
-3

Sesuai dokumentasi Anda dapat menambahkan komentar hanya pada saat membuat tabel. Jadi harus ada definisi tabel. Salah satu cara untuk mengotomatiskannya menggunakan skrip untuk membaca definisi dan memperbarui komentar Anda.

Referensi:

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

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

Nageswara Rao
sumber
2
Jawaban ini salah (mungkin saja memperbarui komentar setelah pembuatan tabel meskipun membosankan), dan hanya tertaut ke situs web lain, jadi tidak berguna dalam hal jawaban Stack Overflow.
Lukas Eder