ฉันได้ตรวจสอบเอกสาร MySQL สำหรับ ALTER TABLEแล้วและดูเหมือนจะไม่มีวิธีเพิ่มหรือแก้ไขความคิดเห็นในคอลัมน์ ฉันจะทำเช่นนี้ได้อย่างไร?
-- for table
ALTER TABLE myTable COMMENT 'Hello World'
-- for columns
-- ???
ฉันได้ตรวจสอบเอกสาร MySQL สำหรับ ALTER TABLEแล้วและดูเหมือนจะไม่มีวิธีเพิ่มหรือแก้ไขความคิดเห็นในคอลัมน์ ฉันจะทำเช่นนี้ได้อย่างไร?
-- for table
ALTER TABLE myTable COMMENT 'Hello World'
-- for columns
-- ???
คำตอบ:
ลอง:
ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'
คุณสามารถใช้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
ในคอลัมน์มิฉะนั้นคอลัมน์จะสูญหายไป
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
หมายเหตุ: คุณสามารถปรับปรุงเป็นตารางเดียวได้หากต้องการ
วิธีแก้ปัญหาที่ให้โดย @Rufinus นั้นยอดเยี่ยมมาก แต่ถ้าคุณเพิ่มขึ้นอัตโนมัติมันจะทำลายมัน
dump.aux_comment,
column_comment,
คุณช่วยตรวจสอบว่าจริงหรือไม่?
ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';
ที่คุณต้องทำ สิ่งนี้ไม่ทำลายการเพิ่มขึ้นอัตโนมัติ
สคีมาข้อมูลไม่ใช่ที่สำหรับจัดการสิ่งเหล่านี้ (ดูคำสั่งฐานข้อมูล DDL)
เมื่อคุณเพิ่มความคิดเห็นคุณต้องเปลี่ยนโครงสร้างตาราง (ความคิดเห็นของตาราง)
จากเอกสาร MySQL 5.6:
INFORMATION_SCHEMA คือฐานข้อมูลภายในอินสแตนซ์ MySQL แต่ละแห่งซึ่งเป็นที่เก็บข้อมูลเกี่ยวกับฐานข้อมูลอื่น ๆ ทั้งหมดที่เซิร์ฟเวอร์ MySQL เก็บรักษา ฐานข้อมูล INFORMATION_SCHEMA ประกอบด้วยตารางแบบอ่านอย่างเดียวหลายตาราง ซึ่งเป็นมุมมองที่แท้จริงไม่ใช่ตารางฐานดังนั้นจึงไม่มีไฟล์ที่เกี่ยวข้องและคุณไม่สามารถตั้งค่าทริกเกอร์ได้ นอกจากนี้ยังไม่มีไดเร็กทอรีฐานข้อมูลที่มีชื่อนั้น
แม้ว่าคุณจะสามารถเลือก INFORMATION_SCHEMA เป็นฐานข้อมูลเริ่มต้นด้วยคำสั่ง USE คุณสามารถอ่านเนื้อหาของตารางเท่านั้นไม่สามารถดำเนินการ INSERT, UPDATE หรือ DELETE ได้
ตามเอกสารประกอบคุณสามารถเพิ่มความคิดเห็นได้ในขณะสร้างตารางเท่านั้น ดังนั้นจึงต้องมีนิยามตาราง วิธีหนึ่งในการทำให้เป็นอัตโนมัติโดยใช้สคริปต์เพื่ออ่านคำจำกัดความและอัปเดตความคิดเห็นของคุณ
อ้างอิง:
http://cornempire.net/2010/04/15/add-comments-to-column-mysql/