Thay đổi bảng MySQL để thêm nhận xét trên các cột


Câu trả lời:


134

thử:

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

12
Nó có vẻ hoạt động tốt, nhưng có cách nào khác để làm điều đó mà không bao gồm định nghĩa cột không?
Jhonny D. Cano -Leftware-

15
Giải pháp này có thể phá vỡ các gia số tự động.
workdreamer,

13
Lưu ý rằng việc thay đổi nhận xét sẽ gây ra cấu trúc lại toàn bộ bảng. Vì vậy, bạn có thể chọn sống mà không có nó trên bàn rất lớn.
Courtney Miles

2
@MarcusPope điều đó là không thể. Xem dba.stackexchange.com/questions/78268/…
gaRex

5
@ user2045006 Điều đó không (hoặc không còn) đúng, miễn là định nghĩa cột khớp chính xác với định nghĩa hiện có. Nhận xét có thể được thêm vào mà không gây ra việc xây dựng lại bảng.
Torben

36

Bạn có thể sử dụng MODIFY COLUMNđể làm điều này. Cứ làm đi...

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

thay thế:

  • YourTable với tên bàn của bạn
  • your_column với tên nhận xét của bạn
  • your_previous_column_definitionvới định nghĩa column_definition của cột , tôi khuyên bạn nên nhận thông qua một SHOW CREATE TABLE YourTablelệnh và sao chép nguyên văn để tránh bất kỳ bẫy nào. *
  • Your new comment với nhận xét cột mà bạn muốn.

Ví dụ...

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)

* Bất cứ khi nào bạn sử dụng MODIFYhoặc CHANGEmệnh đề trong một ALTER TABLEcâu lệnh, tôi khuyên bạn nên sao chép định nghĩa cột từ đầu ra của một SHOW CREATE TABLEcâu lệnh. Điều này bảo vệ bạn khỏi việc vô tình làm mất một phần quan trọng trong định nghĩa cột của bạn do không nhận ra rằng bạn cần đưa nó vào MODIFYhoặc CHANGEmệnh đề của bạn . Ví dụ: nếu bạn MODIFYlà một AUTO_INCREMENTcột, bạn cần chỉ định rõ ràng lại công cụ AUTO_INCREMENTsửa đổi trong MODIFYmệnh đề, nếu không cột sẽ không còn là một AUTO_INCREMENTcột. Tương tự, nếu cột được xác định là NOT NULLhoặc có một DEFAULTgiá trị, những chi tiết này cần được đưa vào khi thực hiện một MODIFYhoặc CHANGEtrên cột, nếu không chúng sẽ bị mất.


14

Tập lệnh cho tất cả các trường trên cơ sở dữ liệu:

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. Xuất tất cả sang CSV
  2. Mở nó trên trình chỉnh sửa csv yêu thích của bạn

Lưu ý: Bạn chỉ có thể cải thiện thành một bảng nếu muốn

Giải pháp được đưa ra bởi @Rufinus là tuyệt vời nhưng nếu bạn có tăng tự động, nó sẽ phá vỡ nó.


3
Theo một người dùng mới mà không có đủ đại diện để bình luận, dump.aux_comment,cần phải như vậy column_comment,. Bạn vui lòng kiểm tra xem nó có đúng không?
nhahtdh 11/09/13

Xin lỗi vì những lỗi lầm.
workdreamer

Tất nhiên, nếu bạn có id auto_increment, bạn cần phải làm như vậy ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';. Điều này không phá vỡ gia số tự động.
mpoletto

@workdreamer Tôi đã tham khảo giải pháp Rufinus mà bạn nói rằng nó có thể phá vỡ mức tăng tự động. Không, giải pháp đưa ra không phá vỡ nó.
mpoletto

1
Tuyệt vời!
Rizki Noor Hidayat Wijaya

4

Lược đồ thông tin không phải là nơi để xử lý những thứ này (xem các lệnh cơ sở dữ liệu DDL).

Khi bạn thêm bình luận, bạn cần thay đổi cấu trúc bảng (bình luận bảng).

Từ tài liệu MySQL 5.6:

INFORMATION_SCHEMA là một cơ sở dữ liệu trong mỗi phiên bản MySQL, nơi lưu trữ thông tin về tất cả các cơ sở dữ liệu khác mà máy chủ MySQL duy trì. Cơ sở dữ liệu INFORMATION_SCHEMA chứa một số bảng chỉ đọc. Chúng thực sự là dạng xem, không phải bảng cơ sở, vì vậy không có tệp nào được liên kết với chúng và bạn không thể đặt trình kích hoạt trên chúng. Ngoài ra, không có thư mục cơ sở dữ liệu với tên đó.

Mặc dù bạn có thể chọn INFORMATION_SCHEMA làm cơ sở dữ liệu mặc định với câu lệnh USE, bạn chỉ có thể đọc nội dung của các bảng chứ không thể thực hiện các thao tác CHÈN, CẬP NHẬT hoặc XÓA trên chúng.

Chương 21 Bảng INFORMATION_SCHEMA


-3

Theo tài liệu, bạn chỉ có thể thêm nhận xét tại thời điểm tạo bảng. Vì vậy nhất thiết phải có bảng định nghĩa. Một cách để tự động hóa nó bằng cách sử dụng script để đọc định nghĩa và cập nhật nhận xét của bạn.

Tài liệu tham khảo:

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

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


2
Câu trả lời này sai (có thể cập nhật nhận xét sau khi tạo bảng ngay cả khi nó tẻ nhạt) và nó chỉ liên kết đến các trang web khác, vì vậy nó không hữu ích về mặt câu trả lời Stack Overflow.
Lukas Eder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.