创建视图时,我会在默认数据库的上下文中创建它。因此,我对表的任何引用都没有明确指定数据库的前缀。但是,当我在Workbench中编辑视图时,它会自动添加数据库前缀!
我不想要数据库前缀,因为当我使用其他名称还原数据库时,会导致还原失败。
是否可以在视图编辑中停止前缀或以其他方式绕过恢复问题?
此致
BobbyY
答案 0 :(得分:0)
那是不可能的。视图存储在特定数据库中,而不是存储在所有数据库“上方”的某些空间中。考虑一下......
use playground_a; /*or whatever database*/
create view view_whatever as
select * from table_whatever;
use playground_b;
select * from view_whatever; /*here you will get an error that view_whatever does not exist*/
select * from playground_a.view_whatever; /*this works*/
这就是视图定义中始终存在数据库前缀的原因。
我看到的唯一可能是使用带有数据库名称的存储过程作为参数。在该过程中,您将使用预准备语句来执行查询的连续字符串和数据库名称参数。当然这有缺点,比如你不能轻易添加where子句。
答案 1 :(得分:0)
在没有明确指定架构的情况下创建视图是一项便利功能。在幕后,视图仍保存在特定模式中(在本例中为默认模式)。当从服务器检索源代码时,返回真实代码(包括模式限定)。因此,当您发送视图代码时,关联就会发生,之后无法再次删除。
答案 2 :(得分:0)
好的,如果我在编辑视图时无法避免模式前缀,那么在将database_a恢复为database_b时如何绕过视图上的恢复错误?
这是我用来创建备份的命令。
mysqldump -u xxxxxx -pxxxxxx --routines database_a | gzip -9 > $FULLGZIPPATH
感谢。
答案 3 :(得分:0)
请参阅https://bugs.mysql.com/bug.php?id=85176
mysql 8.0.3或更高版本已修复