我想以编程方式重命名数据库中的列,MySQL强制我在CHANGE
语句中指定列定义。
ALTER TABLE table_name CHANGE old_name new_name column_definition
所以,我想从INFORMATION_SCHEMA
。COLUMNS
表构建列定义。我已经阅读了调整我来解析SHOW CREATE TABLE table_name
输出的答案,但我不想因为某些原因这样做。
如果可能的话,我希望将列定义作为单个SQL脚本的结果。
答案 0 :(得分:6)
试试这个:
select COLUMN_TYPE from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '{database name}' AND TABLE_NAME = '{table name}' AND COLUMN_NAME = '{column name}';
您需要填写正确的值,但它应该为您提供填写ALTER语句所需的精确字符串。您将需要做一些额外的工作来处理默认语句和NULL设置。
完整的样本:
SELECT CONCAT(
CAST(COLUMN_NAME AS CHAR),
' ',
CAST(COLUMN_TYPE AS CHAR),
IF(ISNULL(CHARACTER_SET_NAME),
'',
CONCAT(' CHARACTER SET ', CHARACTER_SET_NAME)),
IF(ISNULL(COLLATION_NAME), '', CONCAT(' COLLATE ', COLLATION_NAME)),
' ',
IF(IS_NULLABLE = 'NO', 'NOT NULL ', ''),
IF(IS_NULLABLE = 'NO' AND ISNULL(COLUMN_DEFAULT),
'',
CONCAT('DEFAULT ', QUOTE(COLUMN_DEFAULT), ' ')),
UPPER(extra))
AS column_definition
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'table_schema'
AND TABLE_NAME = 'table_name'
AND COLUMN_NAME = 'column_name';
编辑添加了默认值,排序规则和字符集的引用。