我正在尝试以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中执行此操作?
答案 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服务器。
请不要问我怎么知道这个。 : - )