可以使用相同名称的视图和表格

时间:2011-07-21 11:04:43

标签: mysql database view

是否可以使用同名创建一个mysql视图和表

例如我有一个表hs_hr_employee我想创建一个同名的视图

create VIEW hs_hr_employee AS SELECT * from hs_hr_employee;

我收到了以下错误

#1050 - Table 'hs_hr_employee' already exists

任何帮助感谢

此致

4 个答案:

答案 0 :(得分:6)

你不能,给予查看不同的名称,如

hs_hr_employee_view

来自manual

  

在数据库中,基表和视图共享相同的命名空间,因此   基表和视图不能具有相同的名称。

答案 1 :(得分:2)

如上所述,您无法使用观看次数,但可以使用临时表格。

如果创建一个与实际表同名的临时表,则临时表将 shadow (隐藏)实际表。这意味着您无法访问实际的表,直到删除了临时表:

mysql> create table t select 1; # actual table t
Query OK, 1 row affected (0.58 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> create temporary table t select*from t; # temp table t
Query OK, 1 row affected (0.53 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert t select 2; # t refers to the temp table
Query OK, 1 row affected (0.06 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select*from t; # temp table
+---+
| 1 |
+---+
| 1 |
| 2 |
+---+
2 rows in set (0.00 sec)

mysql> drop table t; # temp table
Query OK, 0 rows affected (0.06 sec)

mysql> show tables like "t"; # verify that actual table still exists. show tables will not show temporary tables
+--------------------+
| Tables_in_test (t) |
+--------------------+
| t                  |
+--------------------+
1 row in set (0.00 sec)

mysql>

mysql> select*from t; # now t refers to the actual table
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

mysql> drop table t; # actual table
Query OK, 0 rows affected (0.14 sec)

mysql>

但是,一旦断开会话,临时表就会消失(即使你没有drop)。每次连接时,您都需要重新创建它们。

答案 2 :(得分:0)

是的,如果您在其他模式下创建它。

例如

dbo.Customers

user.customers(这可能是一个视图)

您可以通过包含架构来调用它,也可以从分配了架构的用户那里调用它。

这是用于MS SQL服务器。

答案 3 :(得分:-2)

不仅在 mysql 服务器中,而且在任何 sqldialect 中,同一架构中的表和视图不能具有相同的名称,因为当您触发选择查询时会导致歧义,例如从何处从表中选择列或查看。