แก้ไขตาราง MySQL เพื่อเพิ่มความคิดเห็นในคอลัมน์


110

ฉันได้ตรวจสอบเอกสาร MySQL สำหรับ ALTER TABLEแล้วและดูเหมือนจะไม่มีวิธีเพิ่มหรือแก้ไขความคิดเห็นในคอลัมน์ ฉันจะทำเช่นนี้ได้อย่างไร?

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

-- for columns
-- ???

คำตอบ:


135

ลอง:

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

12
ดูเหมือนว่าจะใช้งานได้ดี แต่มีวิธีอื่นที่จะทำได้โดยไม่รวมนิยามคอลัมน์หรือไม่?
Jhonny D. Cano -Leftware-

15
วิธีนี้สามารถทำลายการเพิ่มอัตโนมัติได้
workdreamer

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คำสั่ง สิ่งนี้ช่วยปกป้องคุณจากการสูญเสียส่วนสำคัญของคำจำกัดความคอลัมน์โดยไม่ได้ตั้งใจโดยไม่ทราบว่าคุณจำเป็นต้องรวมไว้ในMODIFYหรือCHANGEส่วนคำสั่งของคุณ ตัวอย่างเช่นหากคุณMODIFYเป็นAUTO_INCREMENTคอลัมน์คุณต้องระบุAUTO_INCREMENTตัวปรับเปลี่ยนอีกครั้งอย่างชัดเจนในส่วนMODIFYคำสั่งมิฉะนั้นคอลัมน์จะหยุดเป็นAUTO_INCREMENTคอลัมน์ ในทำนองเดียวกันถ้าคอลัมน์ถูกกำหนดเป็นNOT NULLหรือมีDEFAULTค่าจำเป็นต้องรวมรายละเอียดเหล่านี้เมื่อทำMODIFYหรือCHANGEในคอลัมน์มิฉะนั้นคอลัมน์จะสูญหายไป


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

แน่นอนถ้าคุณมี auto_increment id, ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';ที่คุณต้องทำ สิ่งนี้ไม่ทำลายการเพิ่มขึ้นอัตโนมัติ
mpoletto

@workdreamer ฉันกำลังอ้างถึงโซลูชัน Rufinus ที่คุณบอกว่ามันสามารถทำลายการเพิ่มอัตโนมัติได้ ไม่วิธีแก้ปัญหาที่ระบุจะไม่ทำลายมัน
mpoletto

1
น่าตื่นเต้นอัศจรรย์!
Rizki Noor Hidayat Wijaya

4

สคีมาข้อมูลไม่ใช่ที่สำหรับจัดการสิ่งเหล่านี้ (ดูคำสั่งฐานข้อมูล DDL)

เมื่อคุณเพิ่มความคิดเห็นคุณต้องเปลี่ยนโครงสร้างตาราง (ความคิดเห็นของตาราง)

จากเอกสาร MySQL 5.6:

INFORMATION_SCHEMA คือฐานข้อมูลภายในอินสแตนซ์ MySQL แต่ละแห่งซึ่งเป็นที่เก็บข้อมูลเกี่ยวกับฐานข้อมูลอื่น ๆ ทั้งหมดที่เซิร์ฟเวอร์ MySQL เก็บรักษา ฐานข้อมูล INFORMATION_SCHEMA ประกอบด้วยตารางแบบอ่านอย่างเดียวหลายตาราง ซึ่งเป็นมุมมองที่แท้จริงไม่ใช่ตารางฐานดังนั้นจึงไม่มีไฟล์ที่เกี่ยวข้องและคุณไม่สามารถตั้งค่าทริกเกอร์ได้ นอกจากนี้ยังไม่มีไดเร็กทอรีฐานข้อมูลที่มีชื่อนั้น

แม้ว่าคุณจะสามารถเลือก INFORMATION_SCHEMA เป็นฐานข้อมูลเริ่มต้นด้วยคำสั่ง USE คุณสามารถอ่านเนื้อหาของตารางเท่านั้นไม่สามารถดำเนินการ 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.