Jho*_*re- 100 mysql alter-table
我一直在检查ALTER TABLE的MySQL文档,它似乎没有包含添加或修改注释到列的方法.我怎样才能做到这一点?
-- for table
ALTER TABLE myTable COMMENT 'Hello World'
-- for columns
-- ???
Run Code Online (Sandbox Code Playgroud)
Ruf*_*nus 120
尝试:
ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'
Run Code Online (Sandbox Code Playgroud)
Mar*_*ery 32
你可以MODIFY COLUMN用来做这件事.做就是了...
ALTER TABLE YourTable
MODIFY COLUMN your_column
your_previous_column_definition COMMENT "Your new comment"
Run Code Online (Sandbox Code Playgroud)
代:
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)
Run Code Online (Sandbox Code Playgroud)
*无论何时在语句中使用MODIFY或使用CHANGE子句ALTER TABLE,我建议您从SHOW CREATE TABLE语句的输出中复制列定义.这可以防止您意外丢失列定义的重要部分,因为没有意识到您需要将其包含在您的MODIFY或CHANGE子句中.例如,如果MODIFY是AUTO_INCREMENT列,则需要AUTO_INCREMENT在MODIFY子句中再次显式指定修饰符,否则列将不再是AUTO_INCREMENT列.同样,如果列定义为NOT NULL或具有DEFAULT值,则在执行MODIFY或CHANGE在列上执行时需要包含这些详细信息,否则它们将丢失.
wor*_*mer 12
SELECT
table_name,
column_name,
CONCAT('ALTER TABLE `',
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 = 'CURRENT_TIMESTAMP', 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
Run Code Online (Sandbox Code Playgroud)
注意:如果您愿意,可以只改进一个表格
@Rufinus给出的解决方案很棒,但如果你有自动增量,它将打破它.
| 归档时间: |
|
| 查看次数: |
121169 次 |
| 最近记录: |