如何从 MySQL 中表的每一列的名称中删除前缀?
Posted
技术标签:
【中文标题】如何从 MySQL 中表的每一列的名称中删除前缀?【英文标题】:How to remove a prefix from the name of each column of a table in MySQL? 【发布时间】:2019-02-25 16:54:12 【问题描述】:在 mysql 中有一个名为“mytable”的表,我需要执行哪些 sql 命令来从表的每一列的名称中删除前缀“example_”而不显式地一个接一个地重命名所有列名?
【问题讨论】:
没有自动做这种事情的命令。正如 nissim answer 指出的那样,唯一的方法是使用显式 ALTER TABLE 语句。但是,您可以在针对 INFORMATION_SCHEMA 表的 SELECT 中使用 CONCAT、GROUP_CONCAT 的组合,让 MySQL 为您构建查询。 你能写一个这种组合语句的例子吗? 除非您需要对很多表进行此更改或需要反复进行更改,否则编写代码确实需要更多的工作,而不是仅运行SHOW CREATE TABLE mytable
然后使用文本编辑器将其变成一个 ALTER TABLE 语句,每列都有CHANGE COLUMN
。
【参考方案1】:
重申我的意见,您可以使用 INFORMATION_SCHEMA.COLUMNS 让 MySQL 为您构建查询;你仍然需要单独运行它,但是如果你有很多这些操作要执行,它可以节省大量的输入并帮助确保你不会忽略某些东西(尽管还应该注意检查结果在使用它们以确保您的过滤条件最终不会产生不良变化之前。)
我已经有一段时间没有接到电话来做这样的事情了,所以可能存在拼写错误或其他小的语法错误,但它让我大致了解:
SELECT CONCAT('ALTER TABLE `', c.TABLE_NAME, '` '
, GROUP_CONCAT(
CONCAT('RENAME COLUMN `', c.COLUMN_NAME, '`'
, ' TO '
, '`', SUBSTRING(c.COLUMN_NAME, LEN('example_')), '`'
)
ORDER BY c.ORDINAL_POSITION)
, ';'
) AS alterQuery
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_filtering_criteria
AND c.COLUMN_NAME LIKE 'example_%'
AND other_filtering_criteria
GROUP BY c.TABLE_NAME
ORDER BY c.TABLE_NAME
【讨论】:
【参考方案2】:试试这个代码
`ALTER TABLE table_name
MODIFY COLUMN colname type,
MODIFY COLUMN colname type,
etc..,
etc..;`
【讨论】:
这实际上并不能回答问题。以上是关于如何从 MySQL 中表的每一列的名称中删除前缀?的主要内容,如果未能解决你的问题,请参考以下文章