ChatGPT解决这个技术问题 Extra ChatGPT

更改 MySQL 表以在列上添加注释

我一直在检查 MySQL Documentation for ALTER TABLE,它似乎没有包含向列添加或修改评论的方法。我怎样才能做到这一点?

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

-- for columns
-- ???

R
Rufinus

尝试:

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

它似乎工作正常,但是有没有其他方法可以在不包括列定义的情况下做到这一点?
此解决方案可以打破自动增量。
请注意,更改注释将导致表的完全重建。因此,您可以选择在非常大的桌子上不使用它。
@MarcusPope 这是不可能的。请参阅dba.stackexchange.com/questions/78268/…
@user2045006 这不是(或不再)正确,只要列定义与现有定义完全匹配。可以添加注释而不会导致表重建。
M
Mark Amery

您可以使用 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 命令获取并逐字复制以避免任何陷阱。*

您的新评论与您想要的列评论。

例如...

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)

每当您在 ALTER TABLE 语句中使用 MODIFYCHANGE 子句时,我建议您从 SHOW CREATE TABLE 语句的输出中复制列定义。这可以防止您因没有意识到需要将其包含在 MODIFYCHANGE 子句中而意外丢失列定义的重要部分。例如,如果您MODIFY AUTO_INCREMENT 列,则需要在 MODIFY 子句中再次显式指定 AUTO_INCREMENT 修饰符,否则该列将不再是 AUTO_INCREMENT 列。同样,如果列定义为 NOT NULL 或具有 DEFAULT 值,则在对列执行 MODIFYCHANGE 时需要包含这些详细信息,否则它们将丢失。


U
Umbrella

数据库上所有字段的脚本:

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

全部导出为 CSV 在您最喜欢的 csv 编辑器上打开它

注意:如果您愿意,可以只改进为一张桌子

@Rufinus 提供的解决方案很棒,但如果你有自动增量,它会破坏它。


根据没有足够代表发表评论的新用户,dump.aux_comment, 必须是 column_comment,。你介意检查一下是不是真的吗?
对不起这个错误。
当然,如果你有一个 id auto_increment,你需要做 ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';。这不会破坏自动增量。
@workdreamer我指的是Rufinus解决方案,您说它可能会破坏自动增量。不,给定的解决方案不会破坏它。
厉害厉害!
m
mpoletto

信息模式不是处理这些事情的地方(请参阅 DDL 数据库命令)。

添加注释时,您需要更改表格结构(表格注释)。

来自 MySQL 5.6 文档:

INFORMATION_SCHEMA 是每个 MySQL 实例中的一个数据库,该位置存储有关 MySQL 服务器维护的所有其他数据库的信息。 INFORMATION_SCHEMA 数据库包含几个只读表。它们实际上是视图,而不是基表,因此没有与它们关联的文件,并且您不能在它们上设置触发器。此外,没有具有该名称的数据库目录。虽然您可以使用 USE 语句选择 INFORMATION_SCHEMA 作为默认数据库,但您只能读取表的内容,而不能对其执行 INSERT、UPDATE 或 DELETE 操作。

Chapter 21 INFORMATION_SCHEMA Tables


N
Nageswara Rao

根据文档,您只能在创建表时添加注释。所以必须要有表定义。一种使用脚本自动读取定义并更新您的评论的方法。

参考:

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

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


这个答案是错误的(即使很乏味,也可以在创建表后更新评论),并且它只链接到其他网站,所以它对于 Stack Overflow 的答案没有用处。