열에 주석을 추가하기 위해 MySQL 테이블 변경


답변:


134

시험:

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

12
잘 작동하는 것 같지만 열 정의를 포함하지 않고 다른 방법이 있습니까?
Jhonny D. Cano -Leftware-

15
이 솔루션은 자동 증분을 중단 할 수 있습니다.
workdreamer 2013-07-31

13
주석을 변경하면 테이블이 완전히 재구성됩니다. 그래서 당신은 아주 큰 테이블에서 그것없이 살기를 선택할 수 있습니다.
Courtney Miles

2
@MarcusPope 불가능합니다. dba.stackexchange.com/questions/78268/…
gaRex

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)

* 문 에서 MODIFY또는 CHANGE절 을 사용할 때마다 ALTER TABLE문 출력에서 ​​열 정의를 복사하는 것이 좋습니다 SHOW CREATE TABLE. 이렇게하면 MODIFYor CHANGE절 에 포함해야한다는 사실을 깨닫지 못해 열 정의의 중요한 부분이 실수로 손실되는 것을 방지 할 수 있습니다 . 당신이 예를 들어, 열을 명시 적으로 지정해야 다시 수정을 절거나 열은으로 중단됩니다 열입니다. 열이 정의되어있는 경우 마찬가지로, 또는이 값을 이러한 세부 사항은을 할 때 포함해야 하거나 열 또는 그들은 손실됩니다.MODIFYAUTO_INCREMENTAUTO_INCREMENTMODIFYAUTO_INCREMENTNOT NULLDEFAULTMODIFYCHANGE


14

데이터베이스의 모든 필드에 대한 스크립트 :

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. 모두 CSV로 내보내기
  2. 좋아하는 csv 편집기에서 엽니 다.

참고 : 원하는 경우 하나의 테이블로만 개선 할 수 있습니다.

@Rufinus가 제공하는 솔루션은 훌륭하지만 자동 증가가 있으면 중단됩니다.


3
댓글 dump.aux_comment,을 작성할 충분한 담당자가없는 신규 사용자에 따르면 column_comment,. 그것이 사실인지 확인해 주시겠습니까?
nhahtdh

실수해서 죄송합니다.
workdreamer 2013-09-12

물론, id auto_increment가 있으면 ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';. 이것은 자동 증가를 중단하지 않습니다.
mpoletto

@workdreamer 나는 Rufinus 솔루션을 참조하여 자동 증분을 깰 수 있다고 말했습니다. 아니요, 주어진 솔루션은 그것을 깨뜨리지 않습니다.
mpoletto


4

정보 스키마는 이러한 것들을 처리 할 장소가 아닙니다 (DDL 데이터베이스 명령 참조).

주석을 추가 할 때 테이블 구조 (테이블 주석)를 변경해야합니다.

MySQL 5.6 문서에서 :

INFORMATION_SCHEMA는 MySQL 서버가 유지 관리하는 다른 모든 데이터베이스에 대한 정보를 저장하는 각 MySQL 인스턴스 내의 데이터베이스입니다. INFORMATION_SCHEMA 데이터베이스에는 여러 읽기 전용 테이블이 포함되어 있습니다. 실제로는 기본 테이블이 아니라 뷰이므로 연결된 파일이 없으며 트리거를 설정할 수 없습니다. 또한 해당 이름을 가진 데이터베이스 디렉토리가 없습니다.

USE 문을 사용하여 INFORMATION_SCHEMA를 기본 데이터베이스로 선택할 수 있지만 테이블의 내용을 읽을 수만 있고 테이블에 대해 INSERT, UPDATE 또는 DELETE 작업을 수행 할 수 없습니다.

21 장 INFORMATION_SCHEMA 테이블


-3

문서에 따라 테이블을 생성 할 때만 주석을 추가 할 수 있습니다. 따라서 테이블 정의가 있어야합니다. 스크립트를 사용하여 정의를 읽고 주석을 업데이트하는 한 가지 방법입니다.

참고:

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

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


2
이 답변은 잘못되었으며 (지루한 경우에도 테이블 생성 후 주석을 업데이트 할 수 있음) 다른 웹 사이트로만 연결되기 때문에 Stack Overflow 답변 측면에서 유용하지 않습니다.
Lukas Eder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.