J'ai consulté documentation MySQL pour ALTER TABLE et il ne semble pas inclure de moyen permettant d'ajouter ou de modifier un commentaire dans une colonne. Comment puis-je faire ceci?
-- for table
ALTER TABLE myTable COMMENT 'Hello World'
-- for columns
-- ???
essayer:
ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'
Vous pouvez utiliser MODIFY COLUMN
faire ceci. Fais juste ...
ALTER TABLE YourTable
MODIFY COLUMN your_column
your_previous_column_definition COMMENT "Your new comment"
en remplaçant:
YourTable
avec le nom de votre tableyour_column
avec le nom de votre commentaireyour_previous_column_definition
avec la colonne column_definition , que je recommande d'obtenir via un SHOW CREATE TABLE YourTable
commande et copie textuelle pour éviter les pièges. *Your new comment
avec le commentaire de colonne souhaité.Par exemple...
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)
* Chaque fois que vous utilisez les clauses MODIFY
ou CHANGE
dans un ALTER TABLE
déclaration, je vous suggère de copier la définition de la colonne à partir de la sortie d'un SHOW CREATE TABLE
déclaration. Cela vous évite de perdre accidentellement une partie importante de votre définition de colonne en ne réalisant pas que vous devez l'inclure dans votre clause MODIFY
ou CHANGE
. Par exemple, si vous MODIFY
un AUTO_INCREMENT
_ colonne, vous devez spécifier explicitement le AUTO_INCREMENT
modificateur à nouveau dans la clause MODIFY
, sinon la colonne cessera d’être un AUTO_INCREMENT
colonne. De même, si la colonne est définie en tant que NOT NULL
ou a une valeur DEFAULT
, ces détails doivent être inclus lorsque vous faites un MODIFY
ou CHANGE
sur la colonne, sinon ils seront perdus.
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
Note: Vous pouvez améliorer à une seule table si vous préférez
La solution donnée par @Rufinus est excellente, mais si vous avez des incréments automatiques, cela va la casser.
La réponse de Rufinus est appropriée. Je préférerais utiliser MODIFY plutôt que CHANGER si vous n'avez pas besoin de changer le nom de la colonne.
Je ne suis pas d'accord avec le commentaire de Marcus Pope. Le schéma de base de données d'informations mysql ou tout emplacement où réside le schéma d'information et qui contient la définition de données de toute base de données n'est pas l'endroit pour traiter ces éléments. Le schéma d'informations est utilisé par le SGBD pour enregistrer les modifications requises par toute commande DDL exécutée sur la base de données. Pourquoi aurions-nous besoin des commandes DDL?
Il existe deux types de commandes SQL à utiliser dans une base de données relationnelle: DML et DDL. Lorsque vous ajoutez un commentaire, vous devez modifier la structure du tableau.
Depuis la documentation de MySQL 5.6:
"INFORMATION_SCHEMA est une base de données au sein de chaque instance MySQL, le lieu où sont stockées des informations sur toutes les autres bases de données gérées par le serveur MySQL. La base de données INFORMATION_SCHEMA contient plusieurs tables en lecture seule. Ce sont en fait des vues, pas des tables de base, il n'y a donc aucun fichier. qui leur est associé, et vous ne pouvez pas définir de déclencheurs. De plus, aucun répertoire de base de données ne porte ce nom.
Bien que vous puissiez sélectionner INFORMATION_SCHEMA en tant que base de données par défaut avec une instruction USE, vous ne pouvez lire que le contenu des tables et non effectuer d'opérations INSERT, UPDATE ou DELETE sur celles-ci. "