MySQLのドキュメントでALTER TABLEを確認しましたが、列にコメントを追加または変更する方法が含まれていないようです。これどうやってするの?
-- for table
ALTER TABLE myTable COMMENT 'Hello World'
-- for columns
-- ???
MySQLのドキュメントでALTER TABLEを確認しましたが、列にコメントを追加または変更する方法が含まれていないようです。これどうやってするの?
-- for table
ALTER TABLE myTable COMMENT 'Hello World'
-- for columns
-- ???
回答:
試してください:
ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'
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)
* ステートメントでMODIFY
or CHANGE
句を使用する場合は常に、ALTER TABLE
ステートメントの出力から列定義をコピーすることをお勧めしますSHOW CREATE TABLE
。これにより、MODIFY
or CHANGE
句に含める必要があることに気付かずに、列定義の重要な部分を誤って失うことがなくなります。たとえばMODIFY
、AUTO_INCREMENT
列の場合AUTO_INCREMENT
、MODIFY
句で再度修飾子を明示的に指定する必要がありAUTO_INCREMENT
ます。そうしないと、列は列でなくなります。列は次のように定義されている場合も同様、NOT NULL
あるいは持っているDEFAULT
値を、これらの詳細はやったときに含める必要があるMODIFY
かCHANGE
、列または彼らは失われます。
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つのテーブルのみに改善できます。
@Rufinusによって与えられる解決策は素晴らしいですが、自動インクリメントがある場合、それはそれを壊します。
dump.aux_comment,
必要がありますcolumn_comment,
。それが本当かどうかを確認していただけませんか?
ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';
。これは自動インクリメントを壊しません。
情報スキーマは、これらのものを扱う場所ではありません(DDLデータベースコマンドを参照)。
コメントを追加するときは、テーブル構造(テーブルコメント)を変更する必要があります。
MySQL 5.6ドキュメントから:
INFORMATION_SCHEMAは、各MySQLインスタンス内のデータベースであり、MySQLサーバーが維持する他のすべてのデータベースに関する情報を格納する場所です。INFORMATION_SCHEMAデータベースには、いくつかの読み取り専用テーブルが含まれています。これらは実際にはベーステーブルではなくビューであるため、関連付けられているファイルはなく、トリガーを設定できません。また、その名前のデータベースディレクトリはありません。
USEステートメントを使用してデフォルトデータベースとしてINFORMATION_SCHEMAを選択できますが、テーブルの内容のみを読み取ることができ、それらに対してINSERT、UPDATE、またはDELETE操作を実行することはできません。
ドキュメントに従って、コメントはテーブルの作成時にのみ追加できます。したがって、テーブル定義が必要です。スクリプトを使用して定義を読み取り、コメントを更新するための自動化方法の1つ。
参照:
http://cornempire.net/2010/04/15/add-comments-to-column-mysql/