Mysql ALTER VIEW仅为一个视图插入数据库前缀
有一个奇怪的问题 我在我的应用程序中使用了几个db视图。所有视图只引用它们的表,而不以db名称为前缀,例如Mysql ALTER VIEW仅为一个视图插入数据库前缀,mysql,mysql-workbench,Mysql,Mysql Workbench,有一个奇怪的问题 我在我的应用程序中使用了几个db视图。所有视图只引用它们的表,而不以db名称为前缀,例如 SELECT `foo`, `bar` FROM `tablename` 不过,我有一个看法是: SELECT `foo`, `bar` FROM `database_name`.`table_name` 在执行模式比较时,这会引起麻烦 我已经使用ALTER view多次编辑了该视图,但每次它都将数据库名称作为前缀重新插入。我也从零开始删除并重新创建了它,但结果相同 不
SELECT `foo`, `bar`
FROM `tablename`
不过,我有一个看法是:
SELECT `foo`, `bar`
FROM `database_name`.`table_name`
在执行模式比较时,这会引起麻烦
我已经使用ALTER view多次编辑了该视图,但每次它都将数据库名称作为前缀重新插入。我也从零开始删除并重新创建了它,但结果相同
不过,它只对这一个视图执行此操作
我正在使用MySQL Workbench 6.3.10。以下是完整的声明:
CREATE
ALGORITHM = UNDEFINED
DEFINER = `root`@`localhost`
SQL SECURITY DEFINER
VIEW `reporting_base` AS
SELECT
`b`.`creditor_id` AS `creditor_id`,
`c`.`creditor_name` AS `creditor_name`,
`c`.`group_name` AS `group_name`,
`rd`.`base_date` AS `base_date`,
`rd`.`year` AS `year`,
`rd`.`period` AS `period`,
`rd`.`week` AS `week`,
`b`.`id` AS `branch_id`,
`b`.`branch_name` AS `branch_name`,
`b`.`area` AS `area`,
`b`.`manager` AS `manager`,
`s`.`id` AS `staff_id`,
`s`.`type` AS `staff_type`,
`s`.`full_name` AS `staff_name`
FROM
(((`database_name`.`reporting_dates` `rd`
JOIN `database_name`.`branches` `b`)
JOIN `database_name`.`creditors` `c` ON (((`c`.`id` = `b`.`creditor_id`)
AND (`c`.`include_in_reports` = 1))))
LEFT JOIN (SELECT
0 AS `id`,
`database_name`.`creditors`.`id` AS `creditor_id`,
'n/a' AS `type`,
'n/a' AS `full_name`
FROM
`database_name`.`creditors` UNION SELECT
`database_name`.`staff`.`id` AS `id`,
`database_name`.`staff`.`creditor_id` AS `creditor_id`,
`database_name`.`staff`.`type` AS `type`,
`database_name`.`staff`.`full_name` AS `full_name`
FROM
`database_name`.`staff`) `s` ON ((`s`.`creditor_id` = `c`.`id`)))
WHERE
(`rd`.`base_date` <= UTC_DATE())
如果整个CREATEVIEW语句中存在歧义…它可能会添加数据库名称
...from (((''table1' 'rd'
join 'dbname'.'table2' 'b'...
本身足以将“dbname”触发到视图代码中。当我删除对数据库的所有引用时,它仍然会这样做,不应该有歧义的解决方案吗?在更改视图之前,选择数据库名称作为默认数据库。因此,当数据库名称被更改时,它不会被追加。