是否可以更新information_schema表以便将前导文本添加到列名?

时间:2017-07-25 12:02:39

标签: mysql sql

我正在尝试以root身份执行此SQL:

UPDATE information_schema.COLUMNS SET COLUMN_NAME = CONCAT('emp',COLUMN_NAME)  WHERE TABLE_SCHEMA = 'edsdb'

但是得到以下错误:

SQL Error [1044] [42000]: Access denied for user 'root'@'localhost' to database 'information_schema'
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user 'root'@'localhost' to database 'information_schema'

这些我需要修复的表格。列名称off中包含很多列。是否可以直接在SQL中执行此操作?

3 个答案:

答案 0 :(得分:5)

根据MySQL文档(here),information_schema包含views的只读表,因此您无法对其进行更改:

  

INFORMATION_SCHEMA数据库包含几个只读表。   它们实际上是视图,而不是基表,因此没有文件   与它们相关联,您无法在它们上设置触发器。还有,那里   是没有该名称的数据库目录。

您需要使用ALTER TABLE命令,例如:

ALTER TABLE `edsdb` CHANGE `id` `empid` INT;

答案 1 :(得分:2)

不,您无法编辑系统表或视图。这些是只读的。但是您也不需要更新,您只需进行SELECT查询并显示相同的

SELECT CONCAT('emp',COLUMN_NAME) as new_column_name 
FROM information_schema.COLUMNS  
WHERE TABLE_SCHEMA = 'edsdb'

您可以考虑使用以上VIEW语句创建SELECT以供将来使用

答案 2 :(得分:2)

  

是否可以更新information_schema表以便将前导文本添加到列名?

不要尝试。而是更新表格以重命名您需要重命名的列。

有些版本的MySQL可以正确地防止这种情况发生。

有旧版本没有。如果您设法更新其中一个版本的系统表(实际上是mysql架构中的那些),那么您将损坏您的MySQL服务器。

请不要问我怎么知道这个。 : - )