MySQLテーブルを変更して列にコメントを追加する


回答:


134

試してください:

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

12
それは正常に動作するようですが、列定義を含めずにそれを行う他の方法はありますか?
Jhonny D. Cano -Leftware- 2010年

15
このソリューションは、自動インクリメントを壊す可能性があります。
workdreamer 2013

13
コメントを変更すると、テーブルが完全に再構築されることに注意してください。だから、あなたはそれなしで非常に大きなテーブルの上に住むことを選ぶかもしれません。
コートニーマイル

2
@MarcusPopeそれは不可能です。dba.stackexchange.com/questions/78268/…を
gaRex 2015

5
@ user2045006列定義が既存の定義と完全に一致する限り、これは当てはまりません(またはもはや当てはまりません)。テーブルを再構築せずにコメントを追加できます。
Torben

36

MODIFY COLUMNこれを行うために使用できます。ただ...

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

代用:

  • YourTable テーブルの名前
  • your_column コメントの名前
  • your_previous_column_definition列のcolumn_definitionを使用しますSHOW CREATE TABLE YourTable。トラップを回避するために、コマンドを使用して逐語的にコピーすることをお勧めします。*
  • Your new comment 必要な列コメントを付けます。

例えば...

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)

* ステートメントでMODIFYor CHANGE句を使用する場合は常に、ALTER TABLEステートメントの出力から列定義をコピーすることをお勧めしますSHOW CREATE TABLE。これにより、MODIFYor CHANGE句に含める必要があることに気付かずに、列定義の重要な部分を誤って失うことがなくなります。たとえばMODIFYAUTO_INCREMENT列の場合AUTO_INCREMENTMODIFY句で再度修飾子を明示的に指定する必要がありAUTO_INCREMENTます。そうしないと、列は列でなくなります。列は次のように定義されている場合も同様、NOT NULLあるいは持っているDEFAULT値を、これらの詳細はやったときに含める必要があるMODIFYCHANGE、列または彼らは失われます。


13

データベースのすべてのフィールドのスクリプト:

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. すべてをCSVにエクスポート
  2. お気に入りのcsvエディターで開きます

注:必要に応じて、1つのテーブルのみに改善できます。

@Rufinusによって与えられる解決策は素晴らしいですが、自動インクリメントがある場合、それはそれを壊します。


3
コメントするのに十分な担当者を持っていない新しいユーザーによると、であるdump.aux_comment,必要がありますcolumn_comment,。それが本当かどうかを確認していただけませんか?
nhahtdh 2013

間違いでごめんなさい。
workdreamer 2013

もちろん、id auto_incrementがある場合は、それを行う必要がありますALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';。これは自動インクリメントを壊しません。
mpoletto

@workdreamer自動インクリメントが壊れる可能性があるとRufinusソリューションを参照していた。いいえ、与えられたソリューションはそれを壊しません。
mpoletto

1
驚くほど素晴らしいです!
Rizki Noor Hidayat Wijaya

4

情報スキーマは、これらのものを扱う場所ではありません(DDLデータベースコマンドを参照)。

コメントを追加するときは、テーブル構造(テーブルコメント)を変更する必要があります。

MySQL 5.6ドキュメントから:

INFORMATION_SCHEMAは、各MySQLインスタンス内のデータベースであり、MySQLサーバーが維持する他のすべてのデータベースに関する情報を格納する場所です。INFORMATION_SCHEMAデータベースには、いくつかの読み取り専用テーブルが含まれています。これらは実際にはベーステーブルではなくビューであるため、関連付けられているファイルはなく、トリガーを設定できません。また、その名前のデータベースディレクトリはありません。

USEステートメントを使用してデフォルトデータベースとしてINFORMATION_SCHEMAを選択できますが、テーブルの内容のみを読み取ることができ、それらに対してINSERT、UPDATE、またはDELETE操作を実行することはできません。

第21章INFORMATION_SCHEMAテーブル


-3

ドキュメントに従って、コメントはテーブルの作成時にのみ追加できます。したがって、テーブル定義が必要です。スクリプトを使用して定義を読み取り、コメントを更新するための自動化方法の1つ。

参照:

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

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


2
この回答は間違っており(面倒な場合でも、テーブルの作成後にコメントを更新することは可能です)、他のWebサイトにリンクするだけなので、スタックオーバーフローの回答に関しては役に立ちません。
Lukas Eder
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.